递归

哪些问题可以用递归的方法来解决

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中,如果发现有值了就不再递归计算,直接取值

很多情况下,可以通过非递归程序实现递归的功能,避免递归导致的众多问题

原文地址:https://www.cnblogs.com/yingchen/p/9788018.html