一. 可以用递归解决的问题的特征
- 问题可以分解为数据规模更小的子问题;
- 原问题和子问题,数据规模不一样,但是求解思路完全一样的;
- 问题存在终止条件。
二. 编写递归代码的关键
找到递推公式
,推导出终止条件
,将它们改写为代码就可以了。
三. 编写递归代码要注意的点
-
堆栈溢出问题
可使用一个变量来统计函数调用次数。当函数调用次数很大时,停止调用,直接抛出异常。
-
重复计算问题
使用一个 HashMap 来存储每次计算出来的结果。在每次计算前,先查看 HashMap 里有没有缓存过要计算的输入对应的结果,如果有,就直接返回;没有就先计算出结果并存储到 HashMap 中,再返回结果。