微软笔试题 跳台阶问题
来源:互联网 发布:linux ant 配置 编辑:程序博客网 时间:2024/06/07 15:26
题目 : 一个台阶有n个台阶。每次可以上一个台阶,也可以上两个台阶。有多少种不同的上法?
可以这么递归的来考虑,第一次跳一个台阶,这种情况的跳法总数是后面的跳法总数f(n-1);第一次跳两个台阶,这种情况下跳法总数是后面的跳法总数f(n-2);所以全部的跳法数就是
f(n)=f(n-1)+f(n-2),n>2
f(1)=1,n=1
f(2)=2;n=2
这正是Fibonacci数列,可以很快写出它的递归函数
long long Fibonacci(unsigned int n){if (n==1){return 1;}else if (n==2){return 2;}else{return Fibonacci(n-1)+Fibonacci(n-2);}}
这种看似简洁的方法却有着惊人的函数增长率,这个函数式成指数增长的。不信你运行一个大点的n试试
下面用面向对象的方式重写,运行时间为O(n)
class Fibonacci{public:Fibonacci():a(0),b(1){}long long operator()(void){long long t=a;a=b;b=t+b;return a;}private:long long a,b;};int main( void ) {Fibonacci fibonacci;for (int i=1;i<=15;i++){cout<<i<<" : "<<fibonacci()<<endl;}return 0;}上面的这个解决办法在C++的书上看到的。
这个问题还有一个O(1)的办法,就是求出通项公式,直接带入项数,这里就不给出了。本人也没搞懂。
- 微软笔试题 跳台阶问题
- 跳台阶问题 -微软题
- 微软面试100题之27题:跳台阶问题
- 跳台阶问题 【微软面试100题 第二十七题】
- 23. 微软面试题:跳台阶问题
- 微软算法100道题-------跳台阶问题
- 魅族2016Java互联网方向其中一道笔试题--青蛙跳台阶问题
- 跳台阶问题(变态跳台阶)
- 跳台阶问题(变态跳台阶)
- 跳台阶与变态跳台阶问题
- 青蛙跳台阶,变态跳台阶问题
- 跳台阶问题(变态跳台阶)
- 跳台阶问题(变态跳台阶)
- 跳台阶以及变态跳台阶问题
- 青蛙跳台阶/变态跳台阶问题
- 【100题】第二十七 跳台阶问题
- 第二十七题(跳台阶问题)
- 第27题:跳台阶问题
- UVa 10670 - Work Reduction
- HDU-1711(KMP)
- ContentType ,charset和pageEncoding的区别
- JSON
- 快速删除超大文件夹
- 微软笔试题 跳台阶问题
- 堆和栈的区别(转载)
- C# HTML生成PDF
- 逆序
- ORACLE建立自增序列
- enum 在c中的使用
- Tivoli Directory Server安装配置
- select属性
- 超简单实用详细的android Widget实例教程