1. 递归函数
递归函数就是在函数中调用它自身,其主要用于将复杂问题分解为多个子问题,然后再对子问题进行拆分,分解成更小的问题,直到不能再拆分为止。
为了防止递归函数无休止地进行,必须在函数内有终止条件。
2. 递归函数的最大深度
在Python中递归函数的最大深度是997
def func(n):
print(n)
n += 1
func(n)
func(1)
3. 重置递归函数的最大深度
import sys
print(sys.setrecursionlimit(2000))
def func(n):
print(n)
n += 1
func(n)
func(1)
4. 递归函数示例
4.1 计算阶乘 n!
'''
分析:
n! = 1*2*3*4*....(n-2)*(n-1)*n
我们使用函数 fact(n) 来表示n! ,即 fact(n) = n!
n! = 1*2*3*4*....(n-2)*(n-1)*n = fact(n)
(n-1)! = 1*2*3*4*....(n-2)*(n-1) = fact(n-1)
可以推导出:
n! = fact(n-1) * n
同理,fact(n-1) = fact(n-2)*(n-1)
......
直到 n=1 即 1! = 1 的时候不再进行分解;
'''
def fact(n):
if n == 1:
return 1
return n*fact(n-1)
print(fact(5)) # 120
'''
5! 执行过程如下:
5*fact(4)
5*(4*fact(3))
5*(4*(3*fact(2)))
5*(4*(3*(2*fact(1))))
5*(4*(3*(2*1)))
'''
4.2. 斐波纳契数列
斐波纳契数列:1,1,2,3,5,8,13…(该数列中,有n个数字,从第三个数字开始:数值 =前第一个数字 + 前面第二个数字)即:n=(n-2)+(n-1)
# 1,1,2,3,5,8,13,21,34,55,......
def Fibonacci(n):
if n== 1 or n == 2:
return 1
else:
return Fibonacci(n-1) + Fibonacci(n-2)
print(Fibonacci(9))
4.3. 求x的n次方
# 求x的n次方(n大于等于0),即n个x相乘
def func(x,n):
if n == 0:
return 1
else:
return func(x,n-1) * x
print(func(3,10))
4.4 递归求斐波那契数列
以下代码使用递归的方式来生成斐波那契数列:
def recur_fibo(n):
"""递归函数
输出斐波那契数列"""
if n <= 1:
return n
else:
return(recur_fibo(n-1) + recur_fibo(n-2))
# 获取用户输入
nterms = int(input("您要输出几项? "))
# 检查输入的数字是否正确
if nterms <= 0:
print("输入正数")
else:
print("斐波那契数列:")
for i in range(nterms):
print(recur_fibo(i))
执行以上代码输出结果为:
您要输出几项? 10
斐波那契数列:
0
1
1
2
3
5
8
13
21
34