这是一个程序,它使用命令行变量,将其解析为一个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);
}
}
答案 0 :(得分:1)
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,但随后会更改。
答案 1 :(得分:0)
Fn = Fn-1 + Fn-2
,即,从a = 1
和b = 1
开始,您必须计算下一个斐波那契数并将a
和b
移至一个位置右
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;
}