递归算法
递归是快速排序的基础,所以一定要理解基本概念!
递归其实就是一种循环
for循环/while循环,循环的是一个代码块
递归循环,循环的是一个方法
递归的定义,作用,本质
本质:方法不断调用自身
作用:让方法不断地自我循环
递归的思考步骤(重要)
递归的思考步骤:
1.确定递归函数的参数和返回值
参数:
- 用到了哪些参数,哪些变量就是参数
返回值:
- 涉及加减乘除,返回值一般是int,其他一般是void
- 特殊情况特殊记
2.确定单层递归的逻辑
- 累计经验
- 递归一定是从后向前想,由易向难推导,不要钻死胡同!
3.明确终止条件
- 递归终止条件永远在递归方法最上层(最先判断),在单层递归逻辑之上
递归终止条件的作用
递归一定要有终止条件,否则一定会栈溢出。
上图这种递归就是无限的方法栈帧入栈
栈溢出(StackOverFlow)
结合内存图阐述递归
有一只乌龟,他要跳上n级的台阶,每次只能跳1或2格,有几种跳法?
反着想,不要钻牛角尖
(单层递归逻辑)
跳到最后一个台阶,要么跳1格上去,要么跳2格上去,所以是jump(n-1)+jump(n-2)
……
(递归终止条件)
想到跳第一个台阶,只有一种跳法;跳两个台阶,可以跳一次,也可以跳两次,所以是两种
(参数和返回值)
返回值肯定是int,参数就一个台阶级数n