f(n) = f(n-1) + 1;
f(n) = f(n-1) + f(n-2);
f(n) = n * f(n-1);
一个问题只要同时满足以下3个条件,就可以用递归来解决:
写递归代码的关键就是找到如何将大问题分解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最后将递推公式和终止条件翻译为代码。
对于递归代码,若试图想清楚整个递和归的过程,实际上是进入了一个思维误区。
那该如何理解递归代码呢?如果一个问题A可以分解为若干个子问题B、C、D,你可以假设子问题B、C、D已经解决。而且,你只需要思考问题A与子问题B、C、D两层之间的关系即可,不需要一层层往下思考子问题与子子问题,子子问题与子子子问题之间的关系。屏蔽掉递归细节,这样理解起来就简单多了。
因此,理解递归代码,就把它抽象成一个递归公式,不用想一层层的调用关系,不要想一层层的调用关系,不要试图用人脑去分解递归的每个步骤。
笼统的讲,所有的递归代码都可以改写为迭代循环的非递归代码。如何做?抽象出递推公式、初始值和边界条件,然后迭代循环实现。
原文:https://www.cnblogs.com/zyl1994/p/14890883.html