递推是常用的办法,过去印象深刻的比如求n的阶乘,把一个数字逐位输出,汉诺塔实验都是递归的运用案例。递归是递推的一种特殊方式。
递归最重要的是找到结束条件,还有上层关系和下层之间的递推关系,尤其对于某些无法写出通项公式的题目,或者很难写出通项公式的题目,使用递归可以使代码变的简洁,易懂,比如二叉树的遍历中,递归输出明显比非递归容易理解的多,斐波那契数列,通项函数的计算需要解差分方程,很麻烦。用递归也是不错的办法,所有的递归都是
可以用循环实现的,但是递归的效率比较低。
楼梯问题
/**求有20级楼梯,每步可以跨一级也可以跨二级,走到第20级共有多少种走法?*/
分析:
20级的楼梯太多,逐一列举不可能,可以试着减少楼梯数目,从1开始,逐一列举,
回发现其实就是斐波那契数列。
比如走10阶楼梯,第一次有两种走法。
如果第一次走了两个,那么剩下的就是8个
如果第一次走了一个,那么剩下的就是9个
走10个楼梯的方法就是走9个楼梯和8个楼梯的和
如果再加上一次可以走3个阶梯,下面是办法,同样是递推累加
#include <stdio.h>
int main( )
{ int x,n,i,a,b,c;
scanf("%d",