for循环如何在Fibonacci序列中起作用

时间:2015-09-05 15:12:03

标签: java fibonacci

我有一个计算Fibonacci序列的代码,如下所示。我不明白for循环在这个例子中是如何工作的:

public class program {          
    private static int fibo (int n){
        if (n==1 || n==2) return 1;

        int f = 0;
        int f1 = 1;
        int f2 = 1;
        for (int i = 3; i <= n;i++) {
            f = f1 + f2;
            f1 = f2;
            f2 = f;
        }
        return f;
    }

    public static void main(String[] args) {
        int n=7;
        System.out.println(fibo(n));
    }
}

代码的输出为13 ..

2 个答案:

答案 0 :(得分:0)

让我们从更简单的价值开始。假设使用fibo调用3。它不是12,因此f1f2f已初始化(但命名约定不正确)。 i33 <= 3开始,因此f初始化为f1 + f2,即21 + 1)。这是Fibonacci序列的第三个数字。说n4。该过程是相同的,但是由于i成为4 4 <= 3 false而不是暂停,代码与i = 4一起运行,因为{{ 1}}。 4 <= 4f)再次分配给2。已将f1 + f2分配给f1f2)的上一个值,并将1分配给f2f)。 2f1 + f2 == 1 + 2 == 3变为f,这确实是第四个斐波纳契数。

对于更高的值,此过程以相同的方式继续。

答案 1 :(得分:0)

所以前两个斐波纳契数始终为01 之后,所有后面的数字都是前两个数字的总和 根据这一步,下一步是0 + 1 = 1,这与您的代码相同:

int f = 0; //fibonacci #1
int f1 = 1; //fibonacci #2
int f2 = 1; //fibonacci #3

之后,它将以相同的方式循环遍历所有数字:

for (int i = 3;i <= n;i++) {
    //calculate the new fibanacci, will get the fibonacci #1 variable
    f = f1 + f2;

    //the next fibonacci #2 will be the same as fibonacci #3 was before
    f1 = f2;

    //set the new fibonacci to fibonacci #3
    f2 = f; 
}

完成循环后,它只返回斐波纳契数:

return f;