参考
https://www.youtube.com/watch?v=AqGagBmFXgw
https://www.youtube.com/watch?v=C4o9ZUwAcwE
定义
自己调用自己
递归要素
- 递归定义(参数含义以及返回值的含义)
- 递归终止条件(或者叫Base Case 当问题足够小时,就会运行Base Case)
- 递归关系(参考例题:Leetcode 700)
三种形式
- Memorization(缓存) LeetCode 509
- Divide and conquer(分治) LeetCode 98
- Backtracking(回溯) Leetcode 22
注意使用S+“”的形式和list的形式的不同,非常重要
递归在计算机中实现的形式:函数栈
其中print_n(n)的含义是打印1-n,递归终止条件是n=0,执行过程如下:
- 进入main函数,压栈
- 进入函数print_n(5),压栈
- 进入函数print_n(4),压栈
- 进入函数print_n(3),压栈
- 进入函数print_n(2),压栈
- 进入函数print_n(1),压栈
- 进入函数print_n(0),压栈
- print_n(0)触发递归终止条件,print_n(0)出栈
- print_n(1)函数中print_n(0)执行完,打印1,print_n(1)出栈
- print_n(2)函数中print_n(1)执行完,打印2,print_n(2)出栈
- print_n(3)函数中print_n(2)执行完,打印3,print_n(3)出栈
- print_n(4)函数中print_n(3)执行完,打印4,print_n(4)出栈
- print_n(5)函数中print_n(4)执行完,打印5,print_n(5)出栈