【发布时间】:2017-01-30 01:36:08
【问题描述】:
我正在使用递归查找第 n 个斐波那契数的修改版本。 a1 = 0, a2 = 1, a3 = a1 + a2^2, a4 = a2 + a3^2...以此类推
fib(0, 1, n);
public static void fib(BigInteger t1, BigInteger t2, int n) {
if (n == 3) {
System.out.println(t1.add(t2.multiply(t2)));
} else {
fib(t2.multiply(t2), t1.add(t2.multiply(t2)), n - 1);
}
}
答案适用于较小的数字。 fib(0, 1, 5) 返回 5。但是,fib(6) 返回 29 而不是 27
但是,我下面的 DP 解决方案输出正确的值;
public static void fib(BigInteger t1, BigInteger t2, int n) {
BigInteger[] bi = new BigInteger[n];
bi[0] = t1;
bi[1] = t2;
for (int i = 2; i < n; i++) {
bi[i] = bi[i-2].add(bi[i-1].multiply(bi[i-1]));
}
System.out.println(bi[n-1]);
}
fib(0, 1, 5) 返回 5,fib(6) 输出 27。 我似乎无法弄清楚为什么会这样。
【问题讨论】:
-
请提供一系列结果,以便我们看到两者的分歧点。
-
递归方法错误,因为你没有返回任何东西
-
不需要返回任何东西;与 DP 解决方案一样,唯一的结果是打印输出。
-
这不是斐波那契数。 en.wikipedia.org/wiki/Fibonacci_number
-
我在我的问题中提到了“修改版”。
标签: java recursion dynamic-programming fibonacci