1. 程式人生 > >【人生苦短 PYTHON當歌】——PYTHON函數式編程03

【人生苦短 PYTHON當歌】——PYTHON函數式編程03

遞歸 返回 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