跳台阶问题

简介: 转自:http://blog.csdn.net/leo115/article/details/8039962 题目: 给定一个有N个台阶的楼梯,一个人从下到上开始跳台阶,这个人有两种跳的方式:一次跳一个台阶,一次跳两个台阶; 问:从台阶底端跳到台阶顶端,有多少种跳台阶的方式? 分析: 首先我们考虑最简单的情况。

转自: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;  


微信公众号: 猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

目录
相关文章
31.跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
92 0
跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路:对于第n个台阶来说,只能从n-1或者n-2的台阶跳上来 public class jumpFloor { public int jumpFloor(int num){ ...
714 0
AcWing 821. 跳台阶
AcWing 821. 跳台阶
77 0
AcWing 821. 跳台阶
【剑指offer】-跳台阶-08/67
【剑指offer】-跳台阶-08/67
[剑指offer] 跳台阶
本文首发于我的个人博客:尾尾部落 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
928 0
|
Java
(1)剑指Offer之斐波那契数列问题和跳台阶问题
可以肯定的是这一题通过递归的方式是肯定能做出来,但是这样会有一个很大的问题,那就是递归大量的重复计算会导致内存溢出。另外可以使用迭代法,用fn1和fn2保存计算过程中的结果,并复用起来。下面我会把两个方法示例代码都给出来并给出两个方法的运行时间对比。
1723 0
LeetCode每日一题——812. 最大三角形面积
给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积。
100 0
LeetCode每日一题——812. 最大三角形面积

热门文章

最新文章