2014-12-03 71 views
-1

此代碼適用於10斐波那契數字以下。但是我想知道這是否是遞歸函數。 Fibonacci系列的基本配方爲f(n)=f(n-1)+f(n-2)。使用這個我想要一個斐波那契程序。我嘗試過,但時間複雜度更高,這是程序上面的一點變化的原因。它是否是斐波那契數列遞歸?如果不知道如何

int n=10,i,f0=1,f1=1,f2; 

for(i=1;i<=n;i++) 
{ 
    System.out.println(f0); 
    f2=f0+f1; 
    f0=f1; 
    f1=f2; 
    f2=f0; 
} 
+0

它是非遞歸 – Pratham 2014-12-03 12:51:51

+3

不,它不是遞歸。是什麼讓你認爲它是? – Biffen 2014-12-03 12:51:54

+0

否**遞歸**(=調用自己),是**迭代**(=多個步驟)。 – 2014-12-03 12:53:26

回答

4

根據定義,遞歸是一種調用自身(直接或間接)的函數。

其他的那個println(),你的程序中沒有函數調用。因此不,它不是遞歸的。

這是一個簡單的迭代算法。

事實上,一個簡單的遞歸實現對於這個問題並不是一個好的選擇,因爲它具有指數時間複雜度。

0

它是迭代,因爲你有循環,你不是一遍又一遍地調用相同的方法。

public int addNumbers(int number) { 
    if (number <= 0) { 
     return 0; 
    } 
    return number + addNumbers(number - 1); 
} 
0

,因爲該功能不稱自己

這個人是這不是遞歸:

int fib(int n){ 
    if(n<2) 
    return n; 
    return fib(n-1) + fib(n-2); 
} 
,如果你有這樣的事情的方法調用,以自身作爲下面你會調用的方法resursive

正如你看到fib稱自己的方法:fib(n-1)fib(n-2)

0

它不是一個遞歸沒有直接或間接的遞歸調用。評估是基於較小參數的結果(也稱爲dynamic programming)迭代地完成的。但是,在這個實現中,並不是所有的中間結果都被保留,因此只需要一個恆定數量的變量。