标签:如何 入口 参与 lang def 调用 ret 绑定 print
普通递归调用,例如求阶乘
def fact(n):
if n == 0:
return 1
else:
return n * fact(n - 1)
被递归函数需要一个固定名称,以期在函数中引用此名称进行递归。那么,如果单纯使用lambda匿名函数,应如何实现递归。
以阶乘为例,用lambda匿名函数递归可写为
print(
(lambda n: (lambda f: f(f, n))
(lambda f, v: 1 if v == 0 else v * f(f, v - 1)))
(10)
)
def neg(v, a):
if a == 1:
return v + 1
else:
v -= (1.0 / a)
return pos(v, a - 2)
def pos(v, a):
if a == 1:
return v + 1
else:
v += (1.0 / a)
return neg(v, a - 2)
def cal_pi(n):
if n % 2 == 0:
n += 1
if (n - 1) % 2 == 0:
return 4.0 * pos(0, n)
else:
return 4.0 * neg(0, n)
这个算圆周率的算法,也可以用lambda递归表示
(lambda n: (lambda pos, neg: 4.0 * pos(pos, neg, 0, n if n%2 == 1 else n+1)) ((lambda pos, neg, v, k: v+1 if k == 1 else neg(pos, neg, v + (1.0/k), k-2)), (lambda pos, neg, v, k: v+1 if k == 1 else pos(pos, neg, v - (1.0/k), k-2))))(10000)
标签:如何 入口 参与 lang def 调用 ret 绑定 print
原文地址:https://www.cnblogs.com/wxxr/p/13858899.html