跳台阶问题

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

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

目录
相关文章
【剑指offer】-跳台阶-08/67
【剑指offer】-跳台阶-08/67
|
8月前
LeetCode题:70爬楼梯,126斐波那契数
LeetCode题:70爬楼梯,126斐波那契数
42 0
|
9月前
|
存储 算法 C++
剑指offer(C++)-JZ69:跳台阶(算法-动态规划)
剑指offer(C++)-JZ69:跳台阶(算法-动态规划)
|
12月前
LeedCode_03-爬楼梯(70)
LeedCode_03-爬楼梯(70)
31.跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
64 0
青蛙跳台阶
青蛙跳台阶
66 0
AcWing 821. 跳台阶
AcWing 821. 跳台阶
51 0
AcWing 821. 跳台阶
|
机器学习/深度学习 算法
【刷穿 LeetCode】第 N 个泰波那契数 :「迭代」&「递归」&「矩阵快速幂」&「打表」
【刷穿 LeetCode】第 N 个泰波那契数 :「迭代」&「递归」&「矩阵快速幂」&「打表」
20天刷题计划-70. 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?   示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1 阶 + 1 阶 2 阶 示例 2: 输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。 1 阶 + 1 阶 + 1 阶 1 阶 + 2 阶 2 阶 + 1 阶
|
机器学习/深度学习
剑指offer之青蛙跳台阶问题
剑指offer之青蛙跳台阶问题
93 0

热门文章

最新文章

  • 1
    流量控制系统,用正则表达式提取汉字
    25
  • 2
    Redis09-----List类型,有序,元素可以重复,插入和删除快,查询速度一般,一般保存一些有顺序的数据,如朋友圈点赞列表,评论列表等,LPUSH user 1 2 3可以一个一个推
    26
  • 3
    Redis08命令-Hash类型,也叫散列,其中value是一个无序字典,类似于java的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对每字段做CRUD
    25
  • 4
    Redis07命令-String类型字符串,不管是哪种格式,底层都是字节数组形式存储的,最大空间不超过512m,SET添加,MSET批量添加,INCRBY age 2可以,MSET,INCRSETEX
    27
  • 5
    S外部函数可以访问函数内部的变量的闭包-闭包最简单的用不了,闭包是内层函数+外层函数的变量,简称为函数套函数,外部函数可以访问函数内部的变量,存在函数套函数
    23
  • 6
    Redis06-Redis常用的命令,模糊的搜索查询往往会对服务器产生很大的压力,MSET k1 v1 k2 v2 k3 v3 添加,DEL是删除的意思,EXISTS age 可以用来查询是否有存在1
    30
  • 7
    Redis05数据结构介绍,数据结构介绍,官方网站中看到
    21
  • 8
    JS字符串数据类型转换,字符串如何转成变量,+号只要有一个是字符串,就会把另外一个转成字符串,- * / 都会把数据转成数字类型,数字型控制台是蓝色,字符型控制台是黑色,
    19
  • 9
    JS数组操作---删除,arr.pop()方法从数组中删除最后一个元素,并返回该元素的值,arr.shift() 删除第一个值,arr.splice()方法,删除指定元素,arr.splice,从第一
    19
  • 10
    定义好变量,${age}模版字符串,对象可以放null,检验数据类型console.log(typeof str)
    19