Python递归和迭代

递归编程

在函数内部,调用函数自身的编程技巧称为递归( recursion)。递归函数结构清晰,很直观的理解计算过程,但也有严重缺点:相对于普通循环而言,递归运行效率较低,通过不少冗余的计算,递归会消耗大量的调用堆栈。在计算机中,函数调用是经过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧。每当函数返回,栈就会减一层栈帧。因为栈的大小不是无限的,递归调用的次数过多,会致使栈溢出。所以,应该尽可能用循环代替递归。数据结构

举个阶乘的例子,用函数 ca(n) 表示阶乘,ca(n) = n! = 1 * 2 * 3 * 4 * (n-1 ) * n = n * ca(n-1)函数

def ca(n):
    if n == 1:
        return 1
    return n*ca(n-1) 

 

函数的计算过程是这样的:spa

(ca(5))

(4 * ca(5))

(3 * (4 * ca(5)))

(2 * (3 * (4 * ca(5))))

(1 * (2 * (3 * (4 * (5)))))

 

 

迭代code

利用 for 循环来遍历一个列表(list)或元组(tuple),将值依次取出,这种方法咱们称为迭代。blog

for x in range(10):
    print x

 

咱们能够用 for 循环类计算阶乘:递归

m = 1
for x in range(1,10):
    m *= x
>>> print m
>>> 3628800

 

能够用函数来更加人性化阶乘:io

def factorial(x,y):
    m = 0
    if x > 0:
        for n in (x,y+1):
            m *= n
    return m
print factorial(1,10)

 

 

Python还提供一个 reduce 函数,利用 lambda 匿名函数,一行代码即可以完成阶乘的计算:class

print reduce(lambda x,y: x*y, range(1,11))
相关文章
相关标签/搜索