分別用遞迴和迭代實現斐波那契數列

2021-10-03 23:48:38 字數 1051 閱讀 8895

如果你不經意間看到了這篇部落格並且點了進來準備**的話,那我不得不告訴你:本文無任何乾貨!

c語言學了這麼長時間,斷斷續續開始涉及演算法了。不得不說沒有經歷過題庫的洗禮深入一點直接懵掉了。我腦子笨還是自學只能像乙個老哥和我說的那樣依靠你現有的一切資源來成長。乙個斐波那契數列搞了一晚上最後還是看了相關的題和文章才弄懂的,為了不會在以後忘掉我還是寫個給自己看的部落格把學到的梳理一項吧(說實話自言自語挺傻的)。

用遞迴實現的話**如下(只寫自定函式部分):

unsigned int f(int n);

unsigned int f(int n)

else

}

乙個條件判斷解決了問題,**量比起下面要說的迭代方法少了很多,可以說遞迴演算法降低了題目的複雜性,是個很漂亮、很天才的做法,所以說有句話叫「普通程式設計師用迭代,天才程式設計師用遞迴」。但魚c的小甲魚老師說了下半句話「但我們寧可做普通程式設計師」,遞迴演算法同時存在這一些弊端,如不易理解(像我這種腦子不太靈光的這個問題搞了乙個晚上),更重要的是,遞迴降低問題複雜程度的代價是極大的降低了效率,如圖:

我的渣機在後面會開始明顯卡頓並且運算速度會很慢。

相比之下我們用迭代的方法效率會提高很多,

**如下:

unsigned long f(int n);

unsigned long f(int n)

return result;

}

同樣是只寫了自定義函式的部分,雖然**量比用遞迴寫的**多了一些,但是它容易理解(就算是我這種人畫了個流程圖也就懂了),並且效率提高了很多(大概是…幾十萬倍?)

同樣是求斐波那契數列的前100個,可以說是瞬間得出結果,都來不急調任務管器。

在經歷了一晚上的洗禮後,我得到的最終結論就是:「除非遇到一些特殊問題,不然慎用遞迴」。

斐波那契數列的實現 遞迴和迭代

一 定義 斐波那契數列 數列從第三項開始,每一項都等於前兩項之和。如1,1,2,3,5,8,13,21,34,55,89,144,數學定義 遞迴 f0 0,f1 1,fn fn 1 fn 2 n 2,n n 二 實現 1 遞迴法 遞迴滿足2個條件 1 有反覆執行的過程 呼叫自身 2 有跳出反覆執行過...

斐波那契數列的遞迴和迭代實現

遞迴 遞迴就是在函式裡面呼叫自身。遞迴主要可以分為兩個過程 遞推和回歸。所謂遞推就是把複雜的問題求解推到比原來問題簡單的一些問題的求解。回歸就是當獲得最簡單的問題後,逐步返回,依次得到複雜問題的解。迭代 迭代就是利用變數的原值推算出變數的乙個新值。遞迴實現 public class solution...

遞迴和非遞迴分別實現求第n個斐波那契數

在數學上,斐波納契數列以如下被以遞迴的方法定義 f 0 0,f 1 1,f n f n 1 f n 2 n 2,n n include include int fib int n else int main 一直以來很多c語言教科書在講遞迴函式的時候總會拿斐波那契數列作為例子。但是這不意味著fibo...