这是一个程序,它接受一个命令行变量,将其解析为一个 int,输出是等于该命令行参数的斐波那契数。因此,如果我输入 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);
}
}
最佳答案
a
和 b
最初等于 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,但稍后会发生变化。
关于Java Fibonacci for 循环变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54507046/