Y不動點算子可以表達遞歸,用python代碼表達如下:
Y = lambda f:lambda x:(lambda x:f(x(x)))(lambda x:f(x(x)))
對於任意函數fY(f)=ff(Y(f))=fff(Y(f)),從而表示了遞歸
但是,如果直接用到python代碼中,如果採取傳值調用的話,那麼上式將無窮展開下去,直到內存耗盡,而不會實際計算函數的值
如果要採取傳值調用的話,還需要將上式改造一下:
Y2 = lambda f:(lambda x:(lambda x:f(lambda:x(x)))(lambda x:f(lambda:x(x))))(f)
用經典的fac函數測試一下:
__factor = lambda self:lambda n:1 if n== 0 else n*self()(n-1)
factor = Y2(__factor)
factor(3)
輸出爲6,完成了遞歸