持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
1. 函数的递归
函数调用自身的编程技巧叫做递归
递归的特点:
- 一个函数内部自己调用自己(一个函数内部可以调用其他函数,当然在函数内部也可以调用自己)
- 函数内部的代码是相同的,只是针对参数不同,处理结果不同
- 当参数满足一个条件时,函数不再执行,这个条件也就是递归的出口。若没有设定此条件,则会导致出现死循环。
2. 函数递归演练
def sum_number(num):
print(num)
# 递归的出口,当参数满足某个条件时,不再执行函数
if num == 1:
return
# 自己调用自己
sum_number(num - 1)
sum_number(3)
运行结果如下图所示:
输入的参数num为3,在函数内部自己调用自己,进行递归。每递归一次,num就减1,因此再第二次调用sum_numbers这个函数时,出入的参数num=2,以此类推。当满足num=1时,跳出递归,输出返回值,return下方的代码就不会被执行了。
注:若上述代码中忘记增加if num == 1条件就会出现死循环。
3. 实例详解
具体要求:本案例将使用递归计算数字累加
- 定义一个函数
sum_numbers - 能够接收一盒num的整数参数
- 计算
1+2+……num的结果
# 具体要求:本案例将使用递归计算数字累加
# 1. 定义一个函数`sum_numbers`
# 2. 能够接收一盒num的整数参数
# 3. 计算`1+2+……num`的结果
def sum_numbers(num):
# 1. 出口
if num == 1:
return 1
# 2. 数字的累加 num + (1...num-1)
temp = sum_numbers(num - 1)
# 两个数字的相加
return num + temp
result = sum_numbers(100)
print(result)
运行结果如下图所示:本案例计算了1-100的求和
解释:假如我们传入的num参数为3
- 执行
sum_numbers(3),函数内部首先判断3≠1,则继续执行。函数自己调用自己,将数字num-1=2当成参数,传入函数内部。执行temp = sum_numbers(2) sum_numbers(2)在执行时,先判断2≠1,则继续执行。函数自己调用自己,num-1 = 2-1 = 1当成参数,传入函数内部sum_numbers(1),首先判断1=1,则return 1- 函数返回值返回到调用函数的地方
return num + temp,即num + sum_numbers(num-1) = 2 + sum_numbers(1) = 2+1 = 3,再return到上次调用函数的位置。 num + sum_numbers(num-1) = 3 + sum_numbers(2) = 3+3 = 6将其返回到上次调用sum_numbers的地方,即最开始的sum_numbers(3)位置。则sum_numbers(3)函数最终返回值为6。