递归

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

 

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

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

posted on 2018-10-14 21:12  yingchen  阅读(107)  评论(0编辑  收藏  举报

导航