python下lambda+尾递归
这个真好玩,跟scheme一样。http://fmn029.xnimg.cn/fmn029/20090416/0215/b_7004f206096.jpg
回复 #1 mhsy2003 的帖子
>>> print ((lambda self,n:1 if n==1 else n*self(self,n-1))((lambda self,n:1 if n==1 else n*self(self,n-1)),2))2
>>> print ((lambda self,count,n,value:value if count==n else self(self,count+1,n,(count+1)*value))((lambda self,count,n,value:value if count==n else self(self,count+1,n,(count+1)*value)),1,5,1))
120 self 竟然可以用到这里,第一次见到
楼主好想法!!!
:em21: 麻烦。。认真解释下。。。 恩,就是MIT那个著名的丘奇的Y-Combinate,昨天把<<简明python教程>>看完,看到lambda就试着把它写了出来。
关于它的原理看刘未鹏的一篇写的很好的blog:
http://blog.csdn.net/pongba/archive/2006/10/15/1336028.aspx
我怕自己解释不如他那边写的清楚和有味道。
回复 #5 mhsy2003 的帖子
好艰深,,,一看头就大了。。。唉,,数学没学好啊。。
回复 #6 yjphhw 的帖子
阶乘尾递归的实现:版本1:
def factor(count,n,value):
if count==n:
return value
else:
count+=1
value = value*count
return factor(count,n,value)
def fact(n):
return factor(1,n,1)
print (fact(5))
版本2:
def fact(n):
factor =lambda count,n,value:value if count==n else factor(count+1,n,(count+1)*value)
return factor(1,n,1)
print (fact(5))
版本3:
print ((lambda self,count,n,value:value if count==n else self(self,count+1,n,(count+1)*value))((lambda self,count,n,value:value if count==n else self(self,count+1,n,(count+1)*value)),1,5,1))
希望有助于你对照理解 其实一点都不难理解。这种写法纯属没事找事。
A = lambda A, n : 1 if n == 1 else n * A(A, n -1)
然后直接print A(A, 2)