【问题标题】:How a for loop works in Fibonacci Sequencefor 循环如何在斐波那契数列中工作
【发布时间】:2015-09-05 15:12:03
【问题描述】:

我有一个计算斐波那契数列的代码,如下所示。我不明白这个例子中的 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..

【问题讨论】:

  • 如果您在调试器中单步调试代码(它是在 IDE 中运行的旁边的按钮),您可以准确地看到每行代码的作用以及每个变量的值。您的 IDE 也有我建议您使用的代码格式化程序。
  • @Ali12 如果我的回答对您有帮助,请点击支持按钮:D THX!

标签: java fibonacci


【解决方案1】:

所以前两个斐波那契数总是01
之后,所有以下数字都是前两个数字的总和。
据此下一步是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;

【讨论】:

    【解决方案2】:

    让我们从一个更简单的值开始。假设用3 调用fibo。它不是12,所以f1f2f 被初始化(虽然命名约定不好)。 i3 开始,3 &lt;= 3,所以f 被初始化为f1 + f2,即2 (1 + 1)。这是斐波那契数列的第三个数字。说n4。该过程是相同的,但是代码不会因为i 变为44 &lt;= 3false)而停止,而是使用i = 4 运行代码,就像4 &lt;= 4f(即2)再次分配给f1 + f2f1 已分配给 f2 (1) 的先前值,f2 已分配给 f (2)。 f1 + f2 == 1 + 2 == 3,所以f变成3,这确实是第四个斐波那契数。

    对于更高的值,此过程以相同的方式继续。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-30
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 2021-01-19
      • 2015-06-05
      相关资源
      最近更新 更多