【发布时间】:2014-09-06 04:57:14
【问题描述】:
这是一个检查数字是否为斐波那契的简单程序。我有一个神秘的错误:“return true”语句没有被触发。相反,“hi”会被打印很多次。回报应该突破方法,有没有人知道为什么它不是?谢谢!
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));
} }
【问题讨论】:
-
是的——我在hackerrank环境和我的本地IDE中都试过了。它对你有用吗?
-
Math.pow 10 10 总是 10 pow 10,你在那里尝试什么?
-
只检查不超过 10^10 的数字。
-
用英文告诉我们你的整个算法?
-
我几乎可以肯定问题出在您的 while 循环上,因为如果 newfib != 输入,那么它将创建 10^10 个具有相同输入的相同函数实例。你应该用 if 替换 while ,那应该很好。
标签: java math return fibonacci