Java 返回语句不';即使条件为真,也不能突破封锁

Java 返回语句不';即使条件为真,也不能突破封锁,java,math,return,fibonacci,Java,Math,Return,Fibonacci,这是一个简单的程序,用于检查Fibonnacci中是否有数字。我有一个神秘的bug:“return true”语句没有被触发。相反,“hi”将被多次打印。Return应该突破这个方法,有没有人知道为什么它不是?谢谢 import java.util.*; public class Solution { public static boolean listFibs (long oldestFib, long oldFib, long input) { long newFib = olde

这是一个简单的程序,用于检查Fibonnacci中是否有数字。我有一个神秘的bug:“return true”语句没有被触发。相反,“hi”将被多次打印。Return应该突破这个方法,有没有人知道为什么它不是?谢谢

import java.util.*;
public class Solution {

public static boolean listFibs (long oldestFib, long oldFib, long input) {
    long newFib = oldestFib + oldFib;

    while (newFib < Math.pow(10,10)) {

        if (newFib == input) {
            System.out.println("hi");
            return true;
        }

        listFibs(oldFib, newFib, input);
    }

    return false;  
}


public static void main(String[] args) {
    /*Scanner in = new Scanner(System.in);
    int testCases = in.nextInt();
    for (int i = 0; i < testCases; i++) {
        int a = in.nextInt();
        System.out.println("A=  " + a);
        System.out.println(listFibs(0, 1, a));
    }*/

    System.out.println(listFibs(0, 1, 5));
import java.util.*;
公共类解决方案{
公共静态布尔listFibs(long-oldestFib、long-oldFib、long-input){
long-newFib=oldestFib+oldFib;
while(newFib
}
}

由于递归,listFibs有许多化身。返回的
只剩下其中一个

在给出的示例中,您会收到以下调用:

listFib(0,1,5)
  listFib(1,1,5)
    listFib(1,2,5)
      listFib(2,3,5)
      -> true
      listFib(2,3,5) // called again due to the loop
      -> true
      listFib(2,3,5) // called again due to the loop
      -> true
      listFib(2,3,5) // called again due to the loop
      -> true
      listFib(2,3,5) // called again due to the loop
      ...

由于递归,listFibs有许多化身。返回的
只剩下其中一个

在给出的示例中,您会收到以下调用:

listFib(0,1,5)
  listFib(1,1,5)
    listFib(1,2,5)
      listFib(2,3,5)
      -> true
      listFib(2,3,5) // called again due to the loop
      -> true
      listFib(2,3,5) // called again due to the loop
      -> true
      listFib(2,3,5) // called again due to the loop
      -> true
      listFib(2,3,5) // called again due to the loop
      ...

由于递归,listFibs有许多化身。返回的
只剩下其中一个

在给出的示例中,您会收到以下调用:

listFib(0,1,5)
  listFib(1,1,5)
    listFib(1,2,5)
      listFib(2,3,5)
      -> true
      listFib(2,3,5) // called again due to the loop
      -> true
      listFib(2,3,5) // called again due to the loop
      -> true
      listFib(2,3,5) // called again due to the loop
      -> true
      listFib(2,3,5) // called again due to the loop
      ...

由于递归,listFibs有许多化身。返回的
只剩下其中一个

在给出的示例中,您会收到以下调用:

listFib(0,1,5)
  listFib(1,1,5)
    listFib(1,2,5)
      listFib(2,3,5)
      -> true
      listFib(2,3,5) // called again due to the loop
      -> true
      listFib(2,3,5) // called again due to the loop
      -> true
      listFib(2,3,5) // called again due to the loop
      -> true
      listFib(2,3,5) // called again due to the loop
      ...
实际上,如果多次打印“hi”,则必须同时执行return语句。如果在返回语句中安装断点,您将看到。
您的函数是一个
递归
,并且“listFibs”将被多次调用。

实际上,如果多次打印“hi”,则必须同时执行return语句。如果在返回语句中安装断点,您将看到。
您的函数是一个
递归
,并且“listFibs”将被多次调用。

实际上,如果多次打印“hi”,则必须同时执行return语句。如果在返回语句中安装断点,您将看到。
您的函数是一个
递归
,并且“listFibs”将被多次调用。

实际上,如果多次打印“hi”,则必须同时执行return语句。如果在返回语句中安装断点,您将看到。

您的函数是一个
递归
,并且“listFibs”将被多次调用。

在方法中打印所有3个变量的值,您将知道错误所在。您正在使用递归,请查看它被调用了多少次

另外,在调用
listFib
之后,执行将再次转到while循环。您至少需要说
returnlistfibs
。在
列表fibs
和while循环条件之间,没有任何变化。2,3,5被一次又一次地发现


请参见打印方法中所有3个变量的值,您将知道错误所在。您正在使用递归,请查看它被调用了多少次

另外,在调用
listFib
之后,执行将再次转到while循环。您至少需要说
returnlistfibs
。在
列表fibs
和while循环条件之间,没有任何变化。2,3,5被一次又一次地发现


请参见打印方法中所有3个变量的值,您将知道错误所在。您正在使用递归,请查看它被调用了多少次

另外,在调用
listFib
之后,执行将再次转到while循环。您至少需要说
returnlistfibs
。在
列表fibs
和while循环条件之间,没有任何变化。2,3,5被一次又一次地发现


请参见打印方法中所有3个变量的值,您将知道错误所在。您正在使用递归,请查看它被调用了多少次

另外,在调用
listFib
之后,执行将再次转到while循环。您至少需要说
returnlistfibs
。在
列表fibs
和while循环条件之间,没有任何变化。2,3,5被一次又一次地发现


请参见

您只差一步。。。递归调用不会对从listFibs获得的结果进行任何处理,因此程序会看到如下情况:

while (newFib < Math.pow(10,10)) {

    if (newFib == input) {
        System.out.println("hi");
        return true;
    }

    true //or false
}
while(newFib
尝试添加这个额外的小IF语句。一旦找到一个真实的结果,它将被传回链并从函数中传出

while (newFib < Math.pow(10,10)) {

    if (newFib == input) {
        System.out.println("hi");
        return true;
    }

    if listFibs(oldFib, newFib, input){
        return true;
    }
}
while(newFib
你只差一步。。。递归调用不会对从listFibs获得的结果进行任何处理,因此程序会看到如下情况:

while (newFib < Math.pow(10,10)) {

    if (newFib == input) {
        System.out.println("hi");
        return true;
    }

    true //or false
}
while(newFib
尝试添加这个额外的小IF语句。一旦找到一个真实的结果,它将被传回链并从函数中传出

while (newFib < Math.pow(10,10)) {

    if (newFib == input) {
        System.out.println("hi");
        return true;
    }

    if listFibs(oldFib, newFib, input){
        return true;
    }
}
while(newFib
你只差一步。。。递归调用对从listFibs获得的结果没有任何作用,因此程序会看到