递归,Python 函数编程技巧之一

函数的递归

函数调用自身的编程技巧称为递归。

函数内部可以调用其他函数,当然在函数内部也可以调用自己。

递归的特点

  • 函数内部的代码是相同的,只是针对参数不同,处理的结果不同。
  • 当参数满足一个条件时,函数不再执行,这个非常重要,通常被称为递归的出口,否则会出现死循环。

示例代码:

def sum_numbers(num):

    print(num)
    # 递归的出口很重要,否则会出现死循环
    if num == 1:
        return
    # 自己调用自己
    sum_numbers(num - 1)

sum_numbers(3)
# 3
# 2
# 1

递归调用

递归分为两个重要的阶段:递推+回溯。

  • 递推:函数不断减少问题规模直至最终的终止条件。
  • 回溯:拿到最终明确的值后,返回给上次调用进行处理,直至初始层。

由于无限的递归调用会占用大量的内存,因此 python 对函数的递归调用的深度做了限制,当递归调用的次数达到限制时,就会抛出异常。要避免出现这种情况,就必须让递归调用在满足某个特定条件下终止。

递归案例

需求:计算数字累加,接收一个 num 的整数参数,计算 1 + 2 + ... num 的结果。

def sum_numbers(num):

    if num == 1:
        return 1

    # 假设 sum_numbers 能够完成 num - 1 的累加
    temp = sum_numbers(num - 1)

    # 函数内部的核心算法就是两个数字的相加
    return num + temp

print(sum_numbers(2))
# 3

递归是一个编程技巧,初次接触递归会感觉有些吃力!

在处理不确定的循环条件时,使用递归格外有用,例如:遍历整个文件目录的结构。


编程的朝圣之路

posted @ 2020-08-20 14:09  小名叫小明  阅读(180)  评论(0编辑  收藏  举报