当一个函数用它自己来定义时就称为递归。

但重要的是要记住,C提供的仅仅是遵循递归思想的一种企图。不是所有的数学函数都能有效地(或正确地)由C的递归模拟来实现。

递归的4个基本法则:

1.基准情形。必须要有某些基准的情形,它不用递归就能求解。

2.不断推进。对于那些需要递归求解的情形,递归调用必须总能够朝着产生基准情形的方向推进。

3.设计法则。假设所有的递归调用都能运行。

4.合成效益法则。在求解一个问题的同一个实例时,切勿在不同的递归调用中做重复性的工作。


递归的主要问题是隐含的簿记开销。

--------------------------以上内容书中摘录,我是小尾巴,哦不,分割线--------------------

记得大二的时候,从毕业季的跳蚤市场上买了本信计专业的书,上面由讲从递归得出非递归的方法。

现在身在外地,而且时隔多年,那本书怕是找不到了。


关于书中举的Fibonacci数列的解法网上有各种各样的资料,我就不列举了。

只给出一个非递归的解法。

LONG Fibonacci(LONG lparam)
{
	if(lparam==1||lparam==2)
	{
		return 1;
	}

	LONG lf1=1;
	LONG lf2=1;
	LONG lRes=0;
	for(LONG lIndex=0;lIndex<lparam-2;lIndex++)
	{
		lRes=lf1+lf2;
		lf1=lf2;
		lf2=lRes;
	}

	return lRes;
}