递归函数
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
递归函数特性:
- 必须有一个明确的结束条件;
- 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
- 相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)。
- 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
递归说明
递归一定要控制递归的层数,当符合一定条件时要终止递归,几乎所有的递归都能用while循环来代替
递归的两个阶段
递推阶段:从原函数出发,按递归公式递推从未知到已知,最终达到递推的终止条件
回归阶段:按递归终止条件求出结果,逆向逐步代入递归公式,回归到原问题求解
示例:
#1. 写函数 mysum(n)用递归方式实现求和
def mysum(n):
if n == 1:
# 当为1的时候跳出循环
return 1
return n + mysum(n - 1)
print(mysum(100))# 2.写函数myfac(n)用递归实现阶乘
def myfac(n):
if n == 1:
# 当为1的时候跳出循环
return 1
return n * myfac(n - 1)
print(myfac(100))# 3. 已知五位朋友在一起
# 第五位朋友比第四位朋友大2岁
# 第四位朋友比第三位朋友大2岁
# 第三位朋友比第二位朋友大2岁
# 第二位朋友比第一位朋友大2岁
# 第一位朋友说它10岁
def age(n, m, i):
# n表示第几位朋友,m表示岁数,i表示总的人数
print("第%d位朋友%d岁" % (n, m))
m += 2
if n == i:
return
age(n + 1, m, i)
age(1, 10, 5)