尾遞迴優化,以階乘函式為例

2021-08-30 11:06:39 字數 305 閱讀 9878

function factorial(n)else

}

上面是階乘函式的常規遞迴實現

尾遞迴就是每一次的遞迴函式的最後一步是呼叫另乙個函式,而不是乙個操作後再呼叫另乙個函式,如上面的return n * factorial(n-1)就多了乙個n*的操作

尾遞迴優化後:

function factorial(n,base = 1)else

}

這樣子函式不用保留乙個很長的呼叫棧,因為每一次遞迴執行完函式就結束了

參考

高階函式與尾遞迴優化

高階函式特點 1.函式接收的引數是乙個函式 2.函式的return值中包含函式 滿足以上任一條件就稱這個函式為高階函式。高階函式例子 某個函式的return值可以是任何函式,包括自己 ef test1 print from test1 def test2 print from test2 retur...

遞迴演算法 以漢諾塔程式為例

遞迴是演算法中最基礎也是最重要的一部分。但每次我對遞迴的理解都不夠透徹,這次就以漢諾塔程式為例,加深自己對遞迴的理解。漢諾塔 漢諾塔 又稱河內塔 問題是源於印度乙個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片 圓盤。大梵天命令婆羅門把圓盤從下...

簡單理解函式宣告 以signal函式為例

signal 幾乎所有c語言程式的實現過程中都要用到signal函式,作為捕獲不同步的一種方式。我們使用者要呼叫signal函式,可以這樣使用,首先在標頭檔案中加入 include,然後我們可以這樣呼叫signal函式 signal signal type,sighandler t hander 這...