2015-09-05 76 views
-2

的作品我有計算Fibonacci序列代碼,如下圖所示。我不知道如何在這個例子中,for循環的工作原理:如何for循環中的Fibonacci序列

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 ..

+1

如果您逐句通過調試器中的代碼(其旁邊的按鈕在IDE中運行),那麼您可以看到每行代碼的確切含​​義以及每個變量的值。您的IDE也有一個代碼格式化程序,我建議您使用。 –

+0

@ Ali12請點擊upvote按鈕,如果我的答案幫助你:D THX! – cramopy

回答

0

所以前兩個斐波納契數字總是01
之後,所有以下數字是前兩個數字的總和。
根據此下一步就是0 + 1 = 1,這是與您的代碼在這裏:

int f = 0; //fibonacci #1 
int f1 = 1; //fibonacci #2 
int f2 = 1; //fibonacci #3 

後通過所有的數字,它WIL循環做同樣的方式:

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; 
0

讓我們從一個更簡單的值開始。假設fibo3一起被調用。它不是12,所以f1,f2f被初始化(雖然錯誤的命名約定)。 i開始於33 <= 3,所以f初始化爲f1 + f2,即21 + 1)。這是Fibonacci序列的第三個數字。假設n4。該過程是相同的,但不是由於i變爲44 <= 3false)而停止,代碼以i = 4作爲4 <= 4運行。 f(即2)再次分配給f1 + f2f1被指定爲之前的值f21),並且f2被指定爲f2)。 f1 + f2 == 1 + 2 == 3,所以f變成3,這實際上是第四個斐波納契數。

對於更高的值,此過程以相同的方式繼續。