遞迴是一種強大的方法,允許乙個問題已其自身越來越小的形式來定義自己。在電腦科學領域中,我們通常使用遞迴函式來解決帶有遞迴性質的問題,也就是函式呼叫自身。
而什麼是尾遞迴呢?
尾遞迴是遞迴的一種形式,他將所有遞迴形式的呼叫都顯示在函式的末尾。當遞迴呼叫的是整個函式體最後執行的語句,且返回值不屬於表示式的一部分時,這個遞迴呼叫就是尾遞迴。
尾遞迴的特點是在回歸階段不用做任何操作,這個特性十分的重要,現代的編譯器會利用這種特點自動生成優化的**。所以,我們在開發的過程中,如果使用了遞迴,應該盡量考慮是不是能夠轉換成更優秀的尾遞迴。
下面以階乘為例,演示普通遞迴和尾遞迴的不同。
首先來看普通遞迴:
#include
我來瞎扯兩句,現在 3/5/2015 ,想想也快公升大二了,自己的 code 功力還是那麼弱,想想都無顏見江東父老。
anyway 從現在到以後,都要好好學習天天向上來著。~\(≧▽≦)/~
演算法學習之路
目錄 演算法學習之路 一 前言 一 書籍 二 學習內容 1.空間複雜度,時間複雜度 2.貪心演算法 總結 由於長期沉迷摸魚哲學,感覺自己已經快廢了,決定今天開始學習一些演算法資料充實自己,希望不要三分鐘熱度吧。使用的學習書籍是csdn中自帶的 趣學演算法 看過很多演算法的教學書籍了,開頭都是老面孔了...
演算法學習之路
第一階段 練經典常用演算法,下面的每個演算法給我打上十到二十遍,同時自己精簡 因為太常用,所以要練到寫時不用想,10 15 分鐘內打完,甚至關掉顯示器都可以把程式打 出來.1.最短路 floyd dijstra,bellmanford 2.最小生成樹 先寫個prim,kruscal要用並查集,不好寫...
遞迴 演算法學習
遞迴按照遞迴方式可以分為直接遞迴和間接遞迴 1.直接遞迴 遞迴過程p直接呼叫自己 2.間接遞迴 p包含另乙個過程d,而d又呼叫p 遞迴例項 1.漢諾塔問題 include include void hanoi int n,char a,char b,char c int main void 2.八皇...