超级楼梯(递归算法)

【题目如下】(Hdoj2041)

 

《超级楼梯(递归算法)》

【代码详情】

/******************************************************** /* 程 序 名:超级楼梯(递归算法) /* 作 者:为了娶个美女老婆而AC /* 编程时间:2009年8月2日 /* 主要功能:递归算法的实现 *********************************************************/ #include<iostream> using namespace std;//编译命令 int num=0;//定义全局变量num,记录方案数 int Try(int i)//建立递归函数,i表示阶梯数 { int j;//j表示每步所走的台阶数 for(j=1; j<3; j++)//循环 { if(i==j)//如果台阶刚好走完 { num++;//方案数加1 } else if(i>j)//如尚未走完 { Try(i-j);//递归,试剩下的台阶 } } return num;//返回方案数 } int main() { //主函数开始 int n,h=0;//定义变量 scanf(“%d”,&n);//输入测试实例的个数 while(n– && scanf(“%d”,&h)!=EOF)//循环并输入要走台阶数 { num=0;//将每次测试的方案数清0 printf(“%d/n”,Try(h-1));//输出提示信息 } return 0;//主函数结束 }

【运行结果】

《超级楼梯(递归算法)》

【小结】

这道题分别用了递推、递归两种方法解答,比较便知:

递归找的是递归函数,递推找的是递推公式;

递归函数每一次的调用都要保留现场,占用空间,递推只需要公式打表即可;

递归的每一步都可记录在案,时间较长,递推无法记录每一步的走法,时间较短。

    原文作者:递归算法
    原文地址: https://blog.csdn.net/w_z_c/article/details/4402843
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞