【人生苦短 PYTHON當歌】——PYTHON函數式編程03
阿新 • • 發佈:2017-07-22
遞歸 返回 blog div color lam round str python函數
Python遞歸
如果一個函數在內部調用函數自身,這個函數就是遞歸函數;
下面看一個經典例子:利用Python遞歸求階乘
def fact(j): sum=0 if j==0: sum=1 else: sum=j*fact(j-1) return sum for i in range(5): print(‘%d!=%d‘%(i,fact(i)))
經過CPS變換消除general recursion,
id=lambda x:x def factCPS(n): def f(n,k): if n==0: return k(1) else: return f(n-1,lambda x:k(n*x)) return f(n,id)
尾遞歸優化
尾遞歸基於函數的尾調用,每一級調用直接返回函數的返回值更新調用棧,而不用創建新的調用棧,類似叠代的實現,時間和空間上優化了一般遞歸;
def fact(n,sum=0) if n==0:return sum else: return fact(n-1,sum+n)
【人生苦短 PYTHON當歌】——PYTHON函數式編程03