数据结构与算法面试题80道(27)

27.跳台阶问题

题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。

求总共有多少总跳法,并分析算法的时间复杂度。

 

这道题最近经常出现,包括MicroStrategy等比较重视算法的公司

都曾先后选用过个这道题作为面试题或者笔试题。

 

斐波拉契数列的应用。

第一次跳1级,后面剩下的跳法为n-1级台阶的跳法,即f(n-1);

第一次跳2级,后面剩下的跳法为n-2级台阶的跳法,即f(n-2);

因此,n级台阶的跳法总是为f(n)=f(n-1)+f(n-2).

f(1)=1;

f(2)=2;

f(0)=1;

 

#include<iostream>
using namespace std;

int main(){
    int fib[50];
    fib[0]=fib[1]=1;
    int n;
    scanf("%d",&n);
    for(i=2;i<=n;i++)
        fib[i]=fib[i-1]+fib[i-2];
    cout<<fib[n]<<endl;
    return 0;  
}

 

posted @ 2016-03-13 16:53  dreamOwn  阅读(361)  评论(0编辑  收藏  举报