斐波那契數列遞迴與非遞迴精講

2021-09-24 02:45:13 字數 1339 閱讀 3970

斐波那契數列是學習演算法的入門級演算法,要對演算法進行研究的話我們就必須的掌握斐波那契數列演算法。以下從斐波那契數列的簡介,遞迴演算法和非遞迴演算法給大家進行介紹。

簡介:

遞迴演算法:

什麼是遞迴演算法?我將遞迴演算法理解為乙個函式的重複呼叫。f(n)=f(n-1)+f(n-2)。那麼重複呼叫的函式就是f(x)(x可以是任意的正整數)。這個公式的意思是f(n)的值等於其f(n-1)的值加上f(n-2)的值。假如我們求n=3的值,就是f(3)=f(2)+f(1)。由於f(2)=1,f(1)=1,這兩個就是我們要找的結束條件。

遞迴演算法的兩個必要的條件:1.迴圈的部分。2.結束條件。我們已經找到這兩個條件了,那麼我們來編寫**。

int f(int n)//遞迴

if (n == 2)

return f(n - 1) + f(n - 2);

}

遞迴演算法的時間複雜度是o(2^n)。別去深究記住就行,反正我是看了半天都看不明白。

非遞迴演算法:

由於遞迴演算法的時間複雜度非常的高,並且在其中還有許多重複的計算,如圖所示:

可以看到如果使用遞迴的方法來計算的話f(4)執行了1次,f(3)執行了2次,f(2)執行了3次,f(1)執行了2次。本來只需要每乙個進行一次運算的可是卻重複計算了很多。當n很大的時候就會使執行的速度變得很慢。

再來看看原來的式子:f(n)=f(n-1)+f(n-2),f(3)=f(2)+f(1),f(4)=f(3)+f(2)可以發現。要求的那一項等於其前兩項之和。根據這個規則,運用for迴圈就能解決了。

int f(int n)

if (n == 2)

int f1 = 0;

int f2 = 1;

int c = 0;

for (int i = 3; i <= n; i++)

return c;

}

我們要求n=5的時候,那麼就肯定得求出n=3,n=4的值。當要求n=6的時候肯定要求出n=5,n=4的值,n=5的值就必然要求n=3的值。因此我們求n的值時,就必然要求n=3的值,當要求n=3的值的時候,就必然要求n=2,n=1的值。

這就是非遞迴的思想,從低的值往高的值求。演算法的時間複雜度o(n)。

當i=3時,c就是f(3)的值,當i=4時,c就是f(4)的值。如果不懂的話,仔細的分析**,你絕對能夠發現其中的奧秘的。

斐波那契數列 遞迴與非遞迴

首先來說下遞迴,遞迴的思想是大事化小。斐波那契數列 1,1,2,3,5,8,13,21.設f n 是第n個斐波那契數,當n 2,斐波那契數都為1 當n 2,那麼第f n 個斐波那契數就等於前兩個斐波那契數之和。遞迴的 實現 includeint fbnq int n int main 輸入10,得到...

數學 斐波那契數列 遞迴 非遞迴

include pch.h include using std cout using std cin typedef long long ll int fib int n ll fib notrec int n int main return 0 題目給的f 0 1,就這麼寫了 斐波那契第n項 時間...

遞迴與斐波那契數列

迭代實現 def fab n a1 1 a2 1 a3 1if n 1 print 輸入有誤 return 1 while n 2 0 a3 a1 a2 a1 a2 a2 a3 a 1return a3 result fab 20 if result 1 print 總共有 d對小兔子誕生 resu...