斐波纳契功能的困难

时间:2015-11-04 02:14:16

标签: java fibonacci

我应该将这个递归函数改为迭代函数......

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;
    }

3 个答案:

答案 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];
    }