Java 返回语句不';即使条件为真,也不能突破封锁
这是一个简单的程序,用于检查Fibonnacci中是否有数字。我有一个神秘的bug:“return true”语句没有被触发。相反,“hi”将被多次打印。Return应该突破这个方法,有没有人知道为什么它不是?谢谢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
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获得的结果没有任何作用,因此程序会看到