对于一个复杂、大的问题来讲,可能是不好求解的。 甚至这个问题的过程都很难一下拿程序能描述得清楚。但是其中的一些小的子问题呢是比较容易进行求解。 这一些小的子问题的解最后就构成了原问题的解
例如,要求解f(x),关键就是去找寻这个函数 g(x),使得f(x)=g( f(x-1) ),我们就可以有效的把 f(x) 这样规模的问题转化为 f(x-1) 规模的子问题。根据f(0)的值,一步一步往上求出f(x)的值。
只要保证递归 是朝着出口的方向即可。 所谓出口就是指朝着这个递归结束的方向来进行,你不能进行一个死循环或者是 一直在一个嵌套递归的当中。
枚举和递归
都是把大问题化为小问题去解决,但是,枚举的小问题之间横向的、平行的。
递归小问题之间是纵向的、关联的
递归函数调用两种方式
递归解决问题关键:
第一个就是这个 f(x) 要转化成为一个关于 f(x-1) 的一个表达式。 也就是这个递归式g(x)很重要,怎么样能把一个 x 规模的一个问题, 化简称一个 x-1 规模的一个问题,那么依次类推直到化简到 f(0)
第二个就是递归出口(递归终止条件)的问题,即对于最小问题的求解
递归的时候,尽量不要传入数组,