我有一个计算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
..
答案 0 :(得分:0)
让我们从更简单的价值开始。假设使用fibo
调用3
。它不是1
或2
,因此f1
,f2
和f
已初始化(但命名约定不正确)。 i
从3
和3 <= 3
开始,因此f
初始化为f1 + f2
,即2
(1 + 1
)。这是Fibonacci序列的第三个数字。说n
是4
。该过程是相同的,但是由于i
成为4
4 <= 3
false
而不是暂停,代码与i = 4
一起运行,因为{{ 1}}。 4 <= 4
(f
)再次分配给2
。已将f1 + f2
分配给f1
(f2
)的上一个值,并将1
分配给f2
(f
)。 2
,f1 + f2 == 1 + 2 == 3
变为f
,这确实是第四个斐波纳契数。
对于更高的值,此过程以相同的方式继续。
答案 1 :(得分:0)
所以前两个斐波纳契数始终为0
和1
之后,所有后面的数字都是前两个数字的总和
根据这一步,下一步是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;