python递归函数

  在函数内部,可以调用其他函数。如果一个函数在内部调用本身,这个函数就是递归函数。比如计算阶乘n! = 1 x 2 x 3 x ... x n,用函数func(n)表示,于是,func(n)用递归的方式写出来就是:

def func(n):
    if n == 1:
        return 1
    return func(n-1)*n
print(func(5))

具体过程:

次数 n func()
1 5 func(4)*5 120
2 4 func(3)*4 24
3 3 func(2)*3 6
4 2 func(1)*2 2
5 1 return 1 1

  递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。但是需要注意的是防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

递归例子:

1 def move(n, a, b, c):
2     if n == 1:
3         print('move', a, '-->', c)
4     else:
5         move(n-1, a, c, b)
6         move(1, a, b, c)
7         move(n-1, b, a, c)
8 
9 move(4, 'A', 'B', 'C')
汉诺塔
1 def fbi(n):
2     if n == 1:
3         return 1
4     elif n == 0:
5         return 0
6     elif n >= 2:
7         return fbi(n-1)+fbi(n-2)
8 print(fbi(8))
斐波那契数列

 

posted @ 2018-12-19 20:58  momingQI  阅读(179)  评论(0)    收藏  举报