所謂尾遞歸,return語句後面跟的必定沒有新的變量,只須要一個棧,只須要遞歸調用它自己,全部的運算操做所有放在尾遞歸函數的參數列表中進行。編程
例:函數
def tailrecsum(x, running_total=0): if x == 0: return running_total else: return tailrecsum(x - 1, running_total + x) //理論上相似上面:tailrecsum(5, 0) tailrecsum(4, 5) tailrecsum(3, 9) tailrecsum(2, 12) tailrecsum(1, 14) tailrecsum(0, 15) 15
事實上,每次進行尾遞歸,都是具體數值在運算,之因此叫作尾遞歸,由於此函數一直在調用本身,期待着最尾部的結束條件,再次強調,調用的過程當中沒有使用新的未知變量,不須要同遞歸同樣開闢新的內存。spa
因此,使用尾遞歸思想編程解決問題時,要把最尾部的結束條件肯定好,把尾遞歸到達結束條件時return出去的東西寫成咱們期待尾遞歸計算出的東西,把具體的操做放在函數的參數上實現。code