我应该将这个递归函数改为迭代函数......
int rFib(int n)
{ //assumes n >= 0
if(n <= 1)
return n;
else
return (rFib(n-1) + rFib(n-2));
}
但是我在这个数学观点上画了一个空白......我将不胜感激。我能够获得其他3个功能,但我似乎无法弄清楚这个功能的数学。
public static int fib(int n)
{
int theFib = 1;
while(n > 1)
{
theFib = n - 1;
n = n + n - 2;
}
System.out.println(theFib);
return theFib;
}
答案 0 :(得分:1)
Fibonacci sequence中的下一个数字是最后两个数字的总和,因此您需要记住最后两个数字。
在伪代码中,因为你自己应该做一些功课:
n1 = 0
n2 = 1
loop
n = n1 + n2
n1 = n2
n2 = n
end loop
我会留给你限制循环。
答案 1 :(得分:0)
您可以找到示例here。
有问题的代码:
public class FibonacciIterative {
public static int fib(int n) {
int prev1=0, prev2=1;
for(int i=0; i<n; i++) {
int savePrev1 = prev1;
prev1 = prev2;
prev2 = savePrev1 + prev2;
}
return prev1;
}
}
计算哪个方向(向上或向下)并不重要。面临的挑战是妥善处理限制。
答案 2 :(得分:0)
使用动态编程技术:
static int fib(int n) {
int[] fibs = new int[n + 1];
for (int i = 0; i <= n; i++) {
if (i <= 1) {
fibs[i] = i;
} else {
fibs[i] = fibs[i - 1] + fibs[i - 2];
}
}
return fibs[n];
}