Python 递归函数

我们知道装饰器可以调用一个函数,Python的递归函数可以嵌套函数,只不过它在内部调用的是函数本身,类似于一个循环,这样的函数叫递归函数。

如:计算n的1/2

#!/usr/bin/env python

def calc(n):
    print(n)
    if n/2 > 1:
        res=calc(n/2)
        print('res:',res)
    print('N:',n)
    return n

calc(6)

运行结果:

6
3.0
1.5
N: 1.5
res: 1.5
N: 3.0
res: 3.0
N: 6

# 可以看到函数一层层地返回

注意使用递归函数要设置一个"终点",即结束条件称为递归出口,不能让它无限递归下去,好比两面相向的镜子,否则会导致栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

 

使用递归函数实现斐波那契数列

#!/usr/bin/env python
L=[]
def func(n1,n2,stop):
    if n1 == 0:
        L.append(n2)
    n3=n1+n2
    L.append(n3)
    if len(L) < stop:
        func(n2,n3,stop)

func(0,1,10)
print(L)

运行结果:

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

 

posted @ 2017-05-31 22:19  bobo0609  Views(149)  Comments(0Edit  收藏  举报