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]