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

2021-08-19 04:13:46 字數 1136 閱讀 6183

首先來說下遞迴,遞迴的思想是大事化小。

斐波那契數列: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,得到下圖:

得到第十個斐波那契數的同時,問題也來了,當輸入很大的數時

比如40,可以得到結果,但是計算所花時間比較長,大概需要10秒左右,當輸入更大的數計算時間更長。

為什麼會需要這麼長的時間呢?

看**,我們設定乙個全域性變數來統計一下,當要列印第40個斐波那契數時,第5個斐波那契數要計算多少次。

#includeint count = 0;//全域性變數

列印第40個斐波那契數,第5個計算了很多次,這種**效率太低。

這是完全可以用非遞迴來解決這種**效率低下的情況;

非遞迴**實現:

#includeint fbnq(int n)

return c;

}int main()

同樣輸入40,這次輸出結果直接就列印出來了;

同樣的結果在不考慮溢位的情況下,非遞迴的計算速度明顯快很多,但是遞迴的**可讀性較強,它比非遞迴的形式更加清晰。

所以,不同的情況採取的方式自然不同,這就讓我們在以後寫程式時更好的達到自己理想的效果。

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

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

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

斐波那契數列是學習演算法的入門級演算法,要對演算法進行研究的話我們就必須的掌握斐波那契數列演算法。以下從斐波那契數列的簡介,遞迴演算法和非遞迴演算法給大家進行介紹。簡介 遞迴演算法 什麼是遞迴演算法?我將遞迴演算法理解為乙個函式的重複呼叫。f n f n 1 f n 2 那麼重複呼叫的函式就是f x...