哪些问题可以用递归的方法来解决
1、一个问题的解可以分解为几个子问题的解
2、这个问题与分解之后的子问题,除了数据规模不一样,求解思路完全一样
3、存在递归终止条件
写递归的代码的最重要一点是写出递归公式
递归的代码需要警惕堆栈的溢出的问题
因为堆栈有大小,当递归的规模非常大,调用层次很深,一直压入栈,就会出现栈溢出
如果避免堆栈溢出:
1、通过代码限制一定的递归次数
2、避免重复的计算
比如一个公式是f(n) = f(n-1) + f(n-2)
f(5)=f(4)+f(3)
f(4)=f(3)+f(2), f(3)=f(2)+f(1)
f(3)=f(2)+f(1)
这里在递归计算的时候,f(3)被重复计算了好几遍,可以将计算过的内容放入一个map中,如果发现有值了就不再递归计算,直接取值
很多情况下,可以通过非递归程序实现递归的功能,避免递归导致的众多问题