【发布时间】:2017-06-27 06:12:32
【问题描述】:
请原谅我的无知,我还是个菜鸟。每当我输入一个中等大的数字时,它不会给我任何输出,因为它卡在 fibCalculate 方法中。不提供任何输出的数字示例是 40。
package fib;
import java.math.BigInteger;
import java.util.Scanner;
public class FibonacciCalculator {
private static BigInteger TWO = BigInteger.valueOf(2);
public static BigInteger fibCalculate(BigInteger num) {
if (num.equals(BigInteger.ONE) || num.equals(BigInteger.ZERO)) {
return num;
} else {
return (fibCalculate(num.subtract(BigInteger.ONE)).add(fibCalculate(num.subtract(TWO))));
}
}
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
long n = 10;
System.out.println(
"Please input a fibonacci placeholder to see what fibonacci number it holds,\nor input 0 to end program. (The count starts at 0): ");
n = input.nextLong();
System.out.println("Answer: "+fibCalculate(BigInteger.valueOf(n)));
}
}
【问题讨论】:
-
这通常是斐波那契预期的结果。为什么不能使用迭代方法?
-
我很惊讶你能走到这一步。您使用的方法非常慢。仅使用一个循环搜索替代品(网络上到处都是)。
-
您的代码确实会产生 n>40 的输出,只是需要很多时间,因为它非常慢。
-
您的算法与
n呈指数关系。每次计算斐波那契数时,您都在计算两个较小的斐波那契数,依此类推。您应该尝试设计另一种算法。改进这一点的一种方法是将结果存储在某种数组中,并尝试重复使用它们。