for 循环在斐波那契数列中的工作原理
How a for loop works in Fibonacci Sequence
我有一个计算斐波那契数列的代码,如下所示。我不明白这个例子中的 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
..
让我们从一个更简单的值开始。假设用 3
调用 fibo
。它不是 1
或 2
,因此 f1
、f2
和 f
被初始化(尽管命名约定不佳)。 i
从3
开始,而3 <= 3
,所以f
初始化为f1 + f2
,也就是2
(1 + 1
)。这是斐波那契数列的第三个数字。假设 n
是 4
。过程是相同的,但是代码不会因为 i
变为 4
而停止(4 <= 3
是 false
),而是以 i = 4
运行,因为 4 <= 4
。 f
(即 2
)再次分配给 f1 + f2
。 f1
被赋给了 f2
(1
) 的前一个值,f2
被赋给了 f
(2
)。 f1 + f2 == 1 + 2 == 3
,所以f
变成了3
,这确实是第四个斐波那契数。
对于更高的值,此过程以相同的方式继续。
所以前两个斐波那契数总是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;
}
当它完成循环时,它只是 returns 斐波那契数:
return f;
我有一个计算斐波那契数列的代码,如下所示。我不明白这个例子中的 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
..
让我们从一个更简单的值开始。假设用 3
调用 fibo
。它不是 1
或 2
,因此 f1
、f2
和 f
被初始化(尽管命名约定不佳)。 i
从3
开始,而3 <= 3
,所以f
初始化为f1 + f2
,也就是2
(1 + 1
)。这是斐波那契数列的第三个数字。假设 n
是 4
。过程是相同的,但是代码不会因为 i
变为 4
而停止(4 <= 3
是 false
),而是以 i = 4
运行,因为 4 <= 4
。 f
(即 2
)再次分配给 f1 + f2
。 f1
被赋给了 f2
(1
) 的前一个值,f2
被赋给了 f
(2
)。 f1 + f2 == 1 + 2 == 3
,所以f
变成了3
,这确实是第四个斐波那契数。
对于更高的值,此过程以相同的方式继续。
所以前两个斐波那契数总是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;
}
当它完成循环时,它只是 returns 斐波那契数:
return f;