看到一道题,大意是这样的:一次可以走一级或者走两级台阶,问50级台阶有多少种走法。

这种问题都是用到递归求解,找出前面几级走法的依赖关系,但注意的是用int保存结果会不会溢出,并且递归运行效率并不高,C++有个非常丑陋的语法叫模板元编程,通过牺牲编译时间提高递归运行效率。

1.用递归求出结果:

先分析前面几级台阶的走法:

用num(1)代表1级的方法数,下同。

//1级:1种方法 num(1)=1
//2级:2种 num(2)=2
//3级:1+1+1,1+2,2+1,3种 num(3)=3
//4级:1+1+1+1,1+1+2,1+2+1,2+1+1,2+2,5种 num(4)=5
//5级:1+1+1+1+1,1+1+1+2,1+1+2+1,1+2+1+1,2+1+1+1,2+2+1,1+2+2,2+1+2,8种 num(5)=8

可以通过比较得出:

num(3)=num(2)+num(1);

num(4)=num(3)+num(2);

num(5)=num(4)+num(3);

那么特例就是1级和2级台阶的方法数,也是退出递归的接口。

#include<iostream>
long kindnum(int num)//返回方法数
{if(num==1)//1级返回1种方法return 1;else if(num==2)//2级返回2种方法return 2;elsereturn kindnum(num-1)+kindnum(num-2);//3级以上
}
void main()
{std::cout<<kindnum(40);std::cin.get();
}

呃呃呃,由于50级实在要运行很久所以修改为40级。

2.模板元改写

模板元编译的时间会变长,在编译期间对递归做出了处理。

#include<iostream>
//模板元
template<int N>
struct sum
{enum{res=sum<N-1>::res+sum<N-2>::res};
};
template<>
struct sum<1>//特例:1级
{enum{res=1};
};
template<>
struct sum<2>//特例:2级
{enum{res=2};
};
void main()
{std::cout<<sum<40>::res<<std::endl;std::cin.get();
}

其实也是递归,但这个语法真的很。。。运行速度比递归快了很多,40级的台阶方法数也是秒出。

至于这道题的另一版本:一次可以走1步或者2步或者3步,其递归方法也是一样的,只需找出特例跳出递归就行。

C++学习--台阶问题相关推荐

  1. 编程随想 关系图_IT什么岗位比较好找工作?一张金字塔图就能明白

    IT(Internet Technology)互联网技术是指在计算机技术的基础上开发建立的一种信息技术.IT行业这些年一直很火爆, 对于IT就业岗位的选择一直也都是热门话题. 一.IT人才总体供需 金 ...

  2. 《逆向工程核心原理》精读——第11章视频讲座(破解Tut.ReverseMel.exe)

    最近在学习逆向相关.主要的参考书目就是这本<逆向工程核心原理>.这本书的好处在于有实践也同时由浅入深的学习台阶也适合新人. 虽然本书有提及一定的汇编知识,但在阅读本书之前,最好还是需要会一 ...

  3. python爱因斯坦阶梯编程_零基础入门学习Python习题1【爱因斯坦台阶+猜数字】

    001 爱因斯坦出过一道有趣的数学题: 有一个长阶梯,若每步上2阶,最后剩1阶: 若每步上3阶,最后剩2阶: 若每步上5阶,最后剩4阶: 若每步上6阶,最后剩5阶: 只有每步上7阶,最后刚好一阶也不剩 ...

  4. Unity学习-制作台阶和门

    台阶是从aseet store下载,名称和资料如下:(asset store不显示Ctrl+9打开) 展开内容: 注意问题:把台阶ctrl+d复制下,然后进行拖动,台阶重合的部分可能会引起台阶闪动的问 ...

  5. 告别痛苦,快乐学习Pandas!开源教程《Joyful-Pandas》发布

    Datawhale 作者:耿远昊.Datawhale团队 寄语:Pandas 是基于Numpy的一种工具,是为了解决数据分析任务而创建的,其纳入了大量库和一些标准的数据模型,提供了大量能使我们快速便捷 ...

  6. 深度学习中的Normalization模型(附实例公式)

    来源:运筹OR帷幄 本文约14000字,建议阅读20分钟. 本文以非常宏大和透彻的视角分析了深度学习中的多种Normalization模型,从一个新的数学视角分析了BN算法为什么有效. [ 导读 ]不 ...

  7. 谷歌放出AI平民化大招: 李飞飞宣布推出AutoML云平台,让普通企业也能用上深度学习

    作者:杨晓凡 概要:谷歌云机器学习平台(Google Cloud AI)自从上线以来就以预训练的.可以直接调用的高效机器学习模型吸引了许多企业级用户在其上构建简单的机器学习应用. 谷歌云机器学习平台( ...

  8. 那些在学习iOS开发前就应该知道的事(part 1)

    2019独角兽企业重金招聘Python工程师标准>>> 英文原文:Things I wish I had known before starting iOS development- ...

  9. JAVA实现变态跳台阶问题(《剑指offer》)

    最近在刷<剑指offer>里的编程题,但是网上关于<剑指offer>的解答多半是C或者C++的,而且官方(作者)也是在用C++进行讲解,这里自己用java写了一些题目的解答代码 ...

最新文章

  1. windows下安装redis以及一些常规操作
  2. centos6 升级gcc / 无法识别的命令行选项“-std=gnu++1y”的解决办法
  3. C# WinfForm 控件之dev报表 XtraReport (六) 图表Charts 无内容
  4. 全球及中国商用电饭煲行业现状调研及投资决策建议报告2021-2027年版
  5. java设置属性的取值范围是多少_jvm-Java系统属性的范围
  6. 用啥Selenium?! .NET程序员就用自家的Playwright for .NET
  7. (王道408考研操作系统)第二章进程管理-第三节8:经典同步问题之吸烟者问题
  8. 简单博弈论总结加例题解析
  9. Flutter打包apk中的一些巨坑
  10. ffplay不能直播red5上的直播流问题解决
  11. 为何HDFS是大数据分析的软肋
  12. CentOS 查看操作系统版本
  13. 今年春节北京烟花爆竹备货量下降46.7%
  14. 小米路由器4C从0到自编译以及刷固件
  15. 给自己的心灵一把独到的标尺
  16. manjaro 亮度调节
  17. win7 声卡安装失败修复方法
  18. 连续十日票房日冠,《人生大事》带热了电影大盘!它凭何突出重围?
  19. 比A100性能高4.5倍!英伟达H100横扫AI推理基准测试
  20. matlab官方文档翻译之MATLAB 快速入门

热门文章

  1. CSS 网站小图标 雪碧图
  2. “xxx”does not name a type 错误
  3. 2D人体姿态识别-Human3.6M与COCO数据集中,各人体骨骼关键点可视化及对应关节标注顺序(heatmap可视化,热力图和原图融合显示)
  4. selenium批量处理出现页面加载不全现象
  5. 学校机房白嫖网络教程(实战版)
  6. 关于mysql大于号小于号是否会使用到索引
  7. 深度学习“四大名著”发布!Python、TensorFlow、机器学习、深度学习四件套
  8. 最常用的10个mac应用,别问,问就是精品
  9. el-tree树形结构动态更新数据
  10. 台式电脑开机跳出来计算机,电脑开机出现DHCP怎么办?开机出现DHCP的解决办法...