这个系列争取在12天以内完结
本教程默认您熟悉递归的运用,以及高中基本数学知识(数论,离散数学)。
在正式开始之前还是简要介绍一下递归:
递归四条基本法则:
1,基准情形。必须有某些基准情形,他们不需要递归就能求解。
2,不断推进。对于那些需要递归求解的情形,递归调用必须朝着产生基准情形的方向推进。
3,设计法则。假设所有递归调用都能运行。
4,合成效益法则。在求解一个问题的同意实例时,切勿再不同的递归调用中做重复性工作。
递归不仅简化了算法设计,也有助于写出更简洁的代码。但递归的效率并不是很理想,不合理的递归程序在内存开销方面也是很占空间的(虽然现在计算机的内存比较大,但数据量变的特别庞大以后就也难说了)。
画张图来介绍递归占用内存的方式:
递归函数再结束之前会一直在栈区开辟空间,一直到基准条件(如果没有基准条件会一直执行)
接下来看两个简单例子
斐波那契数的计算:
//递归方式
int func(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
else
{
return func(n - 1) + func