一个Y不动点的传值调用方式

4 篇文章 0 订阅
2 篇文章 0 订阅

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值