爬楼梯

假设你现在正在爬楼梯,楼梯有 n 级。每次你只能爬 1 级或者 2 级,那么你有多少种方法爬到楼梯的顶部?

输入格式

第一行输入一个整数 n(1≤n≤50),代表楼梯的级数。

输出格式

输出爬到楼梯顶部的方法总数。

样例输入

5

样例输出

8

问题链接:JSK-16 爬楼梯

问题描述:(略)

问题分析

站在楼梯的第n级想一下,前一步是从哪里来的,问题就清楚了。

由于每次只能上一级或两级,那么f(n)=f(n-2)+f(n-1)。这不就是一个菲波拉契数列吗?不就是一个递推问题?

不仅需要给出递推式,还需要给出递推终止条件:

f(1)=1,只能爬1级到达第1级台阶上;

f(2)=2,可以一次爬2级到达第2级台阶上,也可以两次爬1级到达第2级台阶上;

f(n)=f(n-2)+f(n-1),n>2。

更详细深入的讨论,可以参见参考链接。

程序说明

写一个递归程序来计算会超时,还是递推吧!

参考链接

JSK-4 简单斐波那契【入门】

HDU2041 超级楼梯【递推+水题】

题记:递归与递推是程序设计基础中的基础。

AC的C语言程序如下:

/* JSK-16 爬楼梯 */#include <stdio.h>int fib(int n)
{if(n == 1)return 1;else if(n == 2)return 2;else {int f1 = 1;int f2 = 2;int i;for(i = 3; i <= n; i++) {int tmp = f1 + f2;f1 = f2;f2 = tmp;}return f2;}
}int main()
{int n;scanf("%d", &n);printf("%d\n", fib(n));return 0;
}

超时的C语言程序(5组测试样例通过4组,超时)如下:

/* JSK-16 爬楼梯 */#include <stdio.h>int fib(int n)
{if(n == 1)return 1;else if(n == 2)return 2;elsereturn fib(n - 1) + fib(n - 2);
}int main()
{int n;scanf("%d", &n);printf("%d\n", fib(n));return 0;
}

JSK-16 爬楼梯【基础】相关推荐

  1. 动态规划基础——爬楼梯(Leetcode 70)

    题目选自Leetcode 70.爬楼梯 动态规划的基础题,类似斐波那契数列一样的一维dp 状态转移方程为: dp[i] = dp[i-1] + dp[i-2]; 题目描述: 解题代码: int cli ...

  2. 【力扣动态规划基础专题】:509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 62. 不同路径 63. 不同路径 II 343. 整数拆分 96. 不同的二叉搜索树

    /** 动态规划专题:这是最简单的并且已经给出了转移方程,平时我们用dp[]数组来表示转移方程转移方程: dp[n] = dp[n-1]+dp[n-2]初始值:dp[0] = 0 , dp[1] = ...

  3. 泡面吧” “计蒜客” 挑战难题 第16题:爬楼梯

    第16题:爬楼梯 点击打开链接 尝试次数 1229次 通过率 17.7% 时间限制 1000 ms 内存限制 10000 K 假设你现在正在爬楼梯,楼梯有n级.每次你只能爬1级或者2级,那么你有多少种 ...

  4. 85. Leetcode 746. 使用最小花费爬楼梯 (动态规划-基础题)

    给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用.一旦你支付此费用,即可选择向上爬一个或者两个台阶.你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯 ...

  5. 84. Leetcode 70. 爬楼梯 (动态规划-基础题)

    假设你正在爬楼梯.需要 n 阶你才能到达楼顶.每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢?示例 1:输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶. 1. 1 阶 ...

  6. LeetCode-动态规划基础题-746. 使用最小花费爬楼梯

    描述 746.使用最小花费爬楼梯 数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始). 每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应 ...

  7. 计蒜客 挑战难题 爬楼梯

    计蒜客 挑战难题 爬楼梯 假设你现在正在爬楼梯,楼梯有n级.每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部? 格式: 第一行输入一个数n(n<=50),代表楼梯的级数. 接下来一行输 ...

  8. 动态规划算法-01爬楼梯问题

    爬楼梯问题 动态规划 动态规划算法将带求解问题拆分成一系列相互交叠的子问题,通过递推关系定义各子问题的求解策略,并随时记录子问题的解,最终获得原始问题的解,避免了对交叠子问题的重复求解. 在动态规划算 ...

  9. 爬楼梯与路径类题目记忆化递归与动态规划双解法(Leetcode题解-Python语言)

    70. 爬楼梯(剑指 Offer 10- II. 青蛙跳台阶问题) 递归(英语:Recursion),是指在函数的定义中使用函数自身的方法.有意义的递归通常会把问题分解成规模缩小的同类子问题,当子问题 ...

最新文章

  1. 被放弃的概率权,机器下围棋不理会沉没成本
  2. mysql进程SHOW PROCESSLIST详解Command命令状态
  3. Consul入门05 - 健康检测
  4. Java String.split() 特殊字符处理
  5. Android NDK开发一:配置环境
  6. C语言头文件组织与包含原则
  7. 求一个数字是几位数(简便)
  8. fastai学习:01_intro Questionnaire
  9. 【内部资源】这份Java全能手册在字节传疯了!
  10. 数据结构与算法——二叉树与图汇总整理
  11. python3 logging模块中文乱码_Python logging模块写入中文出现乱码
  12. 阿里云轻量级服务器上JDK及tomcat部署配置
  13. 理解 __doPostBack--2
  14. python可视化数据分析交互作用_测试设计功能交互分析
  15. mac 笔记本 终端使用管理员权限
  16. 基于python编程的激活码生成器
  17. Rational Rose 2003下载与破解安装
  18. MessageBox深入研究
  19. jenkins构建时git报错:hudson.plugins.git.GitException: Failed to fetch from
  20. 微信中域名链接被封如何解决

热门文章

  1. 十分钟带你理解Kubernetes核心概念
  2. 【java学习之路】(java框架)007.IoC和DI注解开发
  3. 该虚拟机似乎正在使用中。 如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权。否则,请按“取消(C)”按钮以防损坏。 配置文件: D:\instractPath\Developmen
  4. Scala初步学习(二)
  5. JDBC在spring中的使用
  6. linux 安装 xpdf csdn,Centos安装xpdf 解析pdf文件
  7. svn 目录结构 trunk java_svn代码版本管理
  8. tensorflow精进之路(二十三)——Object Detection API目标检测(上)(Fast R-CNN算法)
  9. Access安全性之QA详解
  10. tensorflow保存数据为.pb格式和加载.pb文件(转)