码迷,mamicode.com
首页 > 编程语言 > 详细

【人生苦短 PYTHON当歌】——PYTHON函数式编程03

时间:2017-07-22 20:00:35      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:code   for   ret   style   ==   strong   recursion   尾递归   gen   

Python递归                                                                          

如果一个函数在内部调用函数自身,这个函数就是递归函数;

下面看一个经典例子:利用Python递归求阶乘

def fact(j):
    sum=0
    if j==0:
        sum=1
    else:
        sum=j*fact(j-1)
    return sum
for i in range(5):
    print(%d!=%d%(i,fact(i)))

经过CPS变换消除general recursion,

id=lambda x:x
def factCPS(n):
    def f(n,k):
        if n==0:
            return k(1)
        else:
            return f(n-1,lambda x:k(n*x))
    return f(n,id)

尾递归优化                           

尾递归基于函数的尾调用,每一级调用直接返回函数的返回值更新调用栈,而不用创建新的调用栈,类似迭代的实现,时间和空间上优化了一般递归;

def fact(n,sum=0)
    if n==0:
        return sum
    else:
        return fact(n-1,sum+n)

 

【人生苦短 PYTHON当歌】——PYTHON函数式编程03

标签:code   for   ret   style   ==   strong   recursion   尾递归   gen   

原文地址:http://www.cnblogs.com/freezhi/p/7222173.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!