首先來說下遞迴,遞迴的思想是大事化小。
斐波那契數列:1,1,2,3,5,8,13,21........
設f(n)是第n個斐波那契數,
當n<=2,斐波那契數都為1;
當n>2,那麼第f(n)個斐波那契數就等於前兩個斐波那契數之和。
遞迴的**實現:
輸入10,得到下圖:#includeint fbnq(int n)
int main()
得到第十個斐波那契數的同時,問題也來了,當輸入很大的數時
比如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...