Python-递归

295 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

1. 函数的递归

函数调用自身的编程技巧叫做递归

递归的特点:

  1. 一个函数内部自己调用自己(一个函数内部可以调用其他函数,当然在函数内部也可以调用自己)
  2. 函数内部的代码是相同的,只是针对参数不同,处理结果不同
  3. 当参数满足一个条件时,函数不再执行,这个条件也就是递归的出口。若没有设定此条件,则会导致出现死循环。

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条件就会出现死循环。

image.png

3. 实例详解

具体要求:本案例将使用递归计算数字累加

  1. 定义一个函数sum_numbers
  2. 能够接收一盒num的整数参数
  3. 计算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

  1. 执行sum_numbers(3),函数内部首先判断3≠1,则继续执行。函数自己调用自己,将数字num-1=2当成参数,传入函数内部。执行temp = sum_numbers(2)
  2. sum_numbers(2)在执行时,先判断2≠1,则继续执行。函数自己调用自己,num-1 = 2-1 = 1当成参数,传入函数内部
  3. sum_numbers(1),首先判断1=1,则return 1
  4. 函数返回值返回到调用函数的地方 return num + temp,即num + sum_numbers(num-1) = 2 + sum_numbers(1) = 2+1 = 3,再return到上次调用函数的位置。
  5. num + sum_numbers(num-1) = 3 + sum_numbers(2) = 3+3 = 6将其返回到上次调用sum_numbers的地方,即最开始的sum_numbers(3)位置。则sum_numbers(3)函数最终返回值为6。

image.png