递归是指函数调用自身来解决同一问题的更小版本。每个递归都需要一个基本情况来停止递归,以及一个递归情况来逼近基本情况。
核心思想
将问题分解为较小的相同子问题。每次调用都会在调用栈上压入一个栈帧;返回时则弹出。
示例
python
():
n <= :
n * factorial(n - )
factorial()
factorial(4)
= 4 * factorial(3)
= 4 * (3 * factorial(2))
= 4 * (3 * (2 * factorial(1)))
= 4 * 3 * 2 * 1 = 24
此处**O(n)时间和O(n)**栈空间(每次调用一个栈帧)。
递归自然地表达自相似问题——树、图、分治法——远比循环更清晰。
它是归并排序、回溯和动态规划的思想基础。
理解调用栈还能让你更好地进行调试和内存推理。