题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法,并分析算法的时间复杂度。
分析:这道题最近经常出现,包括MicroStrategy等比较重视算法的公司都曾先后选用过个这道题作为面试题或者笔试题。
首先我们考虑最简单的情况。如果只有1级台阶,那显然只有一种跳法。如果有2级台阶,那就有两种跳的方法了:一种是分两次跳,每次跳1级;另外一种就是一次跳2级。
现在我们再来讨论一般情况。我们把n级台阶时的跳法看成是n的函数,记为f(n)。当n>2时,第一次跳的时候就有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另外一种选择是第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为f(n-2)。因此n级台阶时的不同跳法的总数f(n)=f(n-1)+(f-2)。
我们把上面的分析用一个公式总结如下:
/ 1 n=1
f(n)= 2 n=2
\ f(n-1)+(f-2) n>2
分析到这里,相信很多人都能看出这就是我们熟悉的Fibonacci序列,在11里面有讲。
发表评论
-
析构函数为虚函数的原因
2012-09-09 11:42 840我们知道,用C++开发的时候,用来做基类的类的析构函数 ... -
hash的应用
2012-08-31 23:02 966第一部分为一道百度面试题Top K算法的详解;第二部分为关 ... -
微软智力题
2012-08-29 19:59 575第一组1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有 ... -
C++不能被继承的类
2012-08-27 20:16 1065一个类不能被继承, ... -
括号对齐问题
2012-08-27 10:47 1417解法一:左右括号成一对则抵消 可以 ... -
树的遍历
2012-08-19 10:43 723/****************************** ... -
堆排序
2012-08-16 14:24 888堆:(二叉)堆数据结构是一种数组对象。它可以被视为一棵完全 ... -
多态赋值
2012-08-14 16:16 836#include <iostream> usi ... -
static变量与static函数(转)
2012-08-13 10:15 750一、 static 变量 static变量大致分为三种用法 ... -
不用sizeof判断16位32位
2012-08-10 15:21 1709用C++写个程序,如何判断一个操作系统是16位还是3 ... -
找出连续最长的数字串(百度面试)
2012-08-09 15:15 1154int maxContinuNum(const char*in ... -
顺序栈和链栈
2012-08-06 10:01 804顺序栈:话不多说直接上代码 #include ... -
队列的数组实现和链表实现
2012-08-05 16:20 1030话不多少,数组实现上代码: #include<i ... -
KMP算法详解
2012-08-02 21:40 892KMP算法: 是在一个“主文本字符串” ... -
字符串的最长连续重复子串
2012-08-01 15:05 9784两种方法: 循环两次寻找最长的子串: <方法一> ... -
寻找一个字符串连续出现最多的子串的方法(转)
2012-07-31 21:19 1001算法描述首先获得后缀数组,然后1.第一行第一个字符a,与第二行 ... -
字符串的循环移位
2012-07-31 16:52 981假设字符串:abcdefg 左循环两位:cdefgab 右 ... -
一次谷歌面试趣事(转)
2012-07-31 15:26 775很多年前我进入硅谷 ... -
约瑟夫环问题(循环链表)
2012-07-30 21:31 1297题目描述:n只猴子要选大王,选举方法如下:所有猴子按 1, ... -
面试之单链表
2012-07-30 20:18 7311、编程实现一个单链表的建立/测长/打印。 ...
相关推荐
这篇文章主要介绍了在Python语言中解决三个经典的递归问题:跳台阶问题、变态跳台阶问题以及矩形覆盖问题。这三个问题虽然描述不同,但实际上都可以归结为斐波那契数列的变种。通过示例代码的形式,作者详细地介绍了...
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21解析1:本质是DP,对DP进行了拆
题目描述了一个有趣的场景:假设有一栋楼有N阶楼梯,一只兔子每次可以选择跳1阶、2阶或3阶,那么问题来了——当楼梯总数为N阶时,这只兔子有多少种不同的跳跃方式可以到达顶层? #### 二、问题解析 这个问题的本质...
同时,父亲在台阶上的各种动作——不管是“我”在台阶上跳上跳下的活泼场景,还是父亲坐在台阶上的沉思姿态——都在无声地叙述着父亲对于高台阶的深切向往。 语言方面,李森祥运用了一些具有浓厚地方色彩的方言词汇...
8. **台阶问题**:又称“青蛙跳台阶”问题,假设青蛙每次可以跳1步或2步,问到达n阶台阶有多少种跳法。可以使用斐波那契数列来解决,C语言实现需要理解和应用递推关系。 每个算法的实现都需要理解问题本质,选择...
从C语言的结构化编程,到C++的面向对象编程,再到Java的面向对象与跨平台特性,每一步的深入,都意味着对编程语言本质理解的加深和编程技能的提升。 值得一提的是,猴子游戏不仅仅是一个教学工具,它还可以被扩展为...
变式教学通过改变问题的条件或结论,转换问题的形式或内容,引导学生从变化的现象中发现不变的本质,从而揭示方法的实质。在文章中,作者通过方程的实例,展示了一种通过变更参数来引导学生发现二次方程根的取值范围...
- **第十六~第二十章:全排列,跳台阶,奇偶排序,第一个只出现一次等问题** - 包含了组合数学、递归算法等高级主题。 - **第二十一~二十二章:出现次数超过一半的数字,最短摘要的生成** - 探讨了数据统计和...
青蛙跳台阶问题分析(实质上就是斐波那切数列)√ 磁盘容量大小排序 √ 二分查找 √ 冒泡排序 √ 选择排序 √ 插入排序 √ 快速排序 √ 希尔排序 归并排序 桶排序 基数排序 × 一个整数分解成两个质数和 √ 数据分类...