Java Fibonacci for循环变量

时间:2019-02-03 20:06:29

标签: java

这是一个程序,它使用命令行变量,将其解析为一个int,输出为等于该cmd行参数的斐波那契数。因此,如果我输入7,则输出将为13。因为:1 1 2 3 5 8 13 有人可以解释b = a;在for循环内?由于它们都已经等于1,为什么还要将它们设置为彼此相等?

    int a,b,c;
    int n = Integer.parseInt(args[0]);
    a = 1;
    b = 1;
    c = 0;
    if (n == 1 || n == 2)

        System.out.println(1);

    else 
    {
        for (int i = 3; i<=n; i++)
        {
            c = a + b;
            b = a;
            a = c;
        }
        System.out.println(c);
    }
}

2 个答案:

答案 0 :(得分:1)

ab最初等于1 ,因此在循环的第一次迭代中,此语句不执行任何操作。但是,让我们看看以后的迭代会发生什么:

Initial state:
a = 1
b = 1
c = 0
Iteration 1:
c = 1 + 1 = 2
b = a = 1
a = c = 2
Iteration 2:
c = 1 + 2 = 3
b = a = 2
a = c = 3
Iteration 3:
c = 2 + 3 = 5
b = a = 3
a = c = 5

本质上,a存储序列中的前一个数字,而b存储倒数第二个。由于序列的前2个数字为1, 1,因此b在两次迭代中将保持为1,但随后会更改。

答案 1 :(得分:0)

Fn = Fn-1 + Fn-2,即,从a = 1b = 1开始,您必须计算下一个斐波那契数并将ab移至一个位置右

public static long fibonacci(int n) {
    n = Math.abs(n);

    if (n == 0)
        return 0;
    if (n < 3)
        return 1;

    long a = 1;
    long b = 1;
    long c = 0;

    for (int i = 3; i <= n; i++) {
        c = a + b;
        b = a;
        a = c;
    }

    return c;
}