跳台阶问题

简介:

转自:http://blog.csdn.net/leo115/article/details/8039962

题目:

给定一个有N个台阶的楼梯,一个人从下到上开始跳台阶,这个人有两种跳的方式:一次跳一个台阶,一次跳两个台阶;

问:从台阶底端跳到台阶顶端,有多少种跳台阶的方式?

分析:

首先我们考虑最简单的情况。如果只有1个台阶,那么显然只有一种跳法;如果 是2级台阶,那么有2种跳法。对于一个有n级台阶的楼梯来说,我们设跳法为 f(n) ,假如我们先跳1个台阶,则剩下有 n-1 个台阶,跳法为 f(n-1) 次,假如我们先跳2个台阶,则剩下 n-2 阶,跳法为 f(n-2);由此可以推出,对于一个n阶的楼梯,有以下这个跳台阶的公式:


代码如下:

 

[cpp]  view plain copy
 
  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. int JumpStep(int n)  
  5. {  
  6.     if(n <= 0)  
  7.         return -1;  
  8.     if(n == 1)  
  9.         return 1;  
  10.     if(n == 2)  
  11.         return 2;  
  12.     return JumpStep(n-1)+JumpStep(n-2);  
  13. }  
  14. int main()  
  15. {  
  16.     cout<<"5 step jumps : "<<JumpStep(5)<<endl;  
  17.     return 0;  
  18. }  

扩展:

 

当跳台阶的选择多了呢?比如说 每次可以跳3个台阶;按照同样的方法分析,如下公式:


解题代码如下:

 

[cpp]  view plain copy
 
  1. /** 
  2. 题目描述: 
  3. 有N个台阶,一个人从台阶下向上跳台阶,有两种跳的选择 
  4. 1次跳一个台阶,1次跳两个台阶 这两种选择; 
  5. */  
  6. #include <iostream>  
  7. using namespace std;  
  8.   
  9. int JumpStep(int n)  
  10. {  
  11.     if(n <= 0)  
  12.         return -1;  
  13.     if(n == 1)  
  14.         return 1;  
  15.     if(n == 2)  
  16.         return 2;  
  17.     return JumpStep(n-1)+JumpStep(n-2);  
  18. }  
  19. int JumpStep3(int n)  
  20. {  
  21.     if(n <= 0)  
  22.         return -1;  
  23.     if(n == 1)  
  24.         return 1;  
  25.     if(n == 2)  
  26.         return 2;  
  27.     if(n == 3)  
  28.         return 4;  
  29.     return JumpStep3(n-1)+JumpStep3(n-2)+JumpStep3(n-3);  
  30. }  
  31. int main()  
  32. {  
  33.     cout<<"5 step jumps : "<<JumpStep(5)<<endl;  
  34.     cout<<"5 step jumps : "<<JumpStep3(5)<<endl;  
  35.     return 0;  




本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/archive/2012/12/13/2817101.html,如需转载请自行联系原作者
目录
相关文章
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
消息中间件 弹性计算 运维
云消息队列RabbitMQ实践
本评测报告详细分析了阿里云云消息队列 RabbitMQ 版的实践原理、部署体验及核心优势。报告认为其在解决消息积压、脑裂难题及弹性伸缩方面表现优秀,但建议进一步细化架构优化策略和技术细节描述。部署文档详尽,对初学者友好,但仍需加强网络配置和版本兼容性说明。实际部署展示了其高可用性和成本优化能力,适用于高并发消息处理和分布式系统数据同步。为进一步提升方案,建议增加安全性配置指导、性能调优建议及监控告警系统设置。
|
运维 监控 Devops
云效DevOps:让团队协作更高效、更和谐
【6月更文挑战第11天】云效DevOps助力企业提升竞争力,通过自动化、持续集成和部署,实现开发运维无缝协作,降低沟通成本。自动化流程减少人为错误,提高软件交付速度和质量。实时反馈机制促进持续改进,确保团队高效、和谐运作,提供更稳定可靠的软件开发运维体验。
236 3
|
JSON 安全 Java
Spring Boot 日志脱敏,3 步搞定!So easy~!
Spring Boot 日志脱敏,3 步搞定!So easy~!
2152 0
Spring Boot 日志脱敏,3 步搞定!So easy~!
|
Java Spring 容器
Spring Cloud Alibaba-Nacos服务注册源码解析2
Spring Cloud Alibaba-Nacos服务注册源码解析2
Spring Cloud Alibaba-Nacos服务注册源码解析2
|
存储
微机原理知识点
第三章 微型计算机的微处理器(30 道) 1.简述 8086 与 8088 的区别。 CPU 内部的区别:8086 的指令队列缓冲器为 6 字节,8088 为 4 字节;CPU 数据总线的区别:8086 的 数据总线宽度为 16 位,8088 为 8 位;CPU 控制线的区别:因 8086 可一次进行 16 位数据的操作,可用控 制线BHE ̅̅̅̅̅̅和地址线 A0 完成对奇偶存储库的选择,8088 一次只能对 8 位数据的操作,无控制线BHE ̅̅̅̅̅̅的功能。 8086 与 8088 比较,存储器和 I/0 选择控制线的控制电平相反。 2.在 8086/8088 系统中,请分组说明有
249 0
|
安全 架构师 持续交付
Kata创始人王旭谈远程工作的管理要点与员工成长
远程工作是个工作状态,而不仅是工作的位置
619 0
Kata创始人王旭谈远程工作的管理要点与员工成长
|
安全 监控 Java
elasticsearch插件三—— Marvel插件安装详解
Marvel插件:在簇中从每个节点汇集数据。这个插件必须每个节点都得安装。 Marvel是Elasticsearch的管理和监控工具,在开发环境下免费使用。它包含了一个叫做Sense的交互式控制台,使用户方便的通过浏览器直接与Elasticsearch进行交互。
385 0
|
Web App开发 程序员
启迪人心:10个有关编程的至理名言
导读:程序员世界里有哪些名言呢?Jun Auza 列出了一些启迪人心的至理名言,它们大多来自产业界富于经验的人们。 下文列出前10个供读者欣赏: 10. “People think that computer science is the art of geniuses but the actual...
1204 0