设计递归算法应牢记四大基本规则:
- 基准情形(必须要有某些基准情况,它不需要递归就能求解出答案)
例如: 这个函数需要求解必须要有一个已知条件比如
如果没有一个已知条件这个函数是无意义的! 它的递归实现如下:
private int f(int x){
if (x==0)
return 0;
else
return 2*f(x-1)+x*x;
}
就是这个递归方法的基准情况,没有
这个基准情况这个方法会一直调用下去直到内存溢出程序崩溃.
- 不断推进(递归调用必须总能朝着一个基准情况推进)
例如:还是上述方法我们要求 那就必须求
而
又需要
等等.....
这样不断调用下去还是一个结果堆栈溢出,所以推出递归递归调用必须总能朝着一个基准情况推进.
- 设计法则(假设所有递归调用都能运行)
设计递归程序时一般没必要知道簿记管理的细节,不必追踪大量的递归调用
递归的主要问题是隐含的簿记开销,虽然这些开销几乎总是合理的(因为递归程序不仅简化了算法还有利于代码的整洁),但是递归绝不应该作为简单for循环的代替物
- 合成效益法则(求解一个问题的同一实例时,切勿在不同递归调用中做重复的工作)
请听下回分解