1. 递归的定义
我调我自己!
2. 递归的分类
-
第一种分类方法
- 直接递归
- 我调我自己
- 间接递归
-两个函数互相调用
一般而言,间接递归都可以转化为直接递归
- 直接递归
-
第二种分类方法
- 尾递归
- 可以通过循环语句转化为等价的递归函数
- 其他递归
- 可以通过栈的方式来转化为等价的递归函数
- 尾递归
3. 递归的使用场景
- 定义是递归的
- 斐波那契数列
- 数据结构是递归的
- 单链表
- 二叉树
- 。。。。
- 问题求解的方法是递归的
- 汉诺塔(大的问题转化为小的问题)
- 迷宫
- 。。。。
4. 递归模型
-
递归出口
- 递归结束的条件
-
递归体
- 即自己调用自己
-
递归求解思路:大问题求解转化为若干个相似的子问题求解
5. 递归算法的设计
5.1 求解步骤
- 对原问题 f ( s ) f(s) f(s)进程分析,也就是对 ”大问题“ 进程分析,提出合理的 ”小问题“ f ( s ′ ) f(s') f(s′)
- 假设小问题 f ( s ′ ) f(s')