递归,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
递归是一个编程技巧,初次接触递归会感觉有些吃力!
在处理不确定的循环条件时,使用递归格外有用,例如:遍历整个文件目录的结构。
欢迎关注我的公众号《编程的朝圣之路》,带你一起从入门到入魔。