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,完成了递归