递归,作为编程中极具魅力的算法思想,核心是函数调用自身,将复杂问题拆解为规模更小的同类子问题,直到触达'边界条件'(递归出口)后逐层回溯,最终解决原问题。这种'大事化小、小事化了'的思路,能让代码简洁优雅,尤其适合解决具有重复子结构的问题。
本文将通过 4 个经典实例,带你吃透递归的核心逻辑,所有代码均可直接运行,建议结合注释逐行理解递归的'递'与'归'。
一、阶乘算法:递归的入门典范
阶乘是递归最基础的应用场景。数学上,n!(n 的阶乘)定义为:
- 边界条件:
0! = 1(0 的阶乘为 1,是人为规定的递归出口) - 递归关系:
n! = n × (n-1)!(n>0 时,n 的阶乘等于 n 乘以 n-1 的阶乘)
代码实现:
# 阶乘运算
def factorial(n):
if n == 0:
return 1
else:
return factorial(n - 1) * n
n = int(input())
print(f'{n}的阶乘为{factorial(n)}')
逻辑解析:以计算 5! 为例,递归的执行过程是'先递后归':
- 递:
factorial(5)→ 调用factorial(4)→ 调用factorial(3)→ 调用factorial(2)→ 调用factorial(1)→ 调用factorial(0); - 归:
factorial(0)返回 1 →factorial(1)=1×1=1→factorial(2)=1×2=2→factorial(3)=2×3=6→factorial(4)=6×4=24→factorial(5)=24×5=120。
二、斐波那契数列:递归解决递推关系问题
斐波那契数列是经典的递推数列,其核心规律为:
- 边界条件:第 1 位和第 2 位均为 1(
F(1)=1,F(2)=1); - 递归关系:从第 3 位开始,每一位等于前两位之和(
F(n) = F(n-1) + F(n-2))。
代码实现:
# 第 n 个斐波那契数
def fibonacci(n):
n == n == :
:
fibonacci(n - ) + fibonacci(n - )
n = (())
()

