当一个函数用它自己来定义时就称为递归。
但重要的是要记住,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; }