一個臺階總共有n級,如果一次可以跳1級,也可以跳2級。求總共有 多少總跳法。

/*
copyright@nciaebupt 轉載請註明出處
題目:一個臺階總共有n級,如果一次可以跳1級,也可以跳2級。求總共有
多少總跳法。
分析:
這道題最近經常出現,包括MicroStrategy等比較重視算法的公司都曾
先後選用過個這道題作爲面試題或者筆試題。
首先我們考慮最簡單的情況。如果只有1級臺階,那顯然只有一種跳法。
如果有2級臺階,那就有兩種跳的方法了:一種是分兩次跳,每次跳1
級;另外一種就是一次跳2級。
現在我們再來討論一般情況。我們把n級臺階時的跳法看成是n的函數,
記爲f(n)。
當  n=1 時有  1 種跳法
一次跳一階
當  n=2 時有  2 種跳法
一次跳一階,  1 1
一次跳二階  2
當n>2時,第一次跳的時候就有兩種不同的選擇:
一是第一次只跳1級,此時跳法數目等於後面剩下的n-1級臺階的跳法
數目,即爲f(n-1);
另外一種選擇是第一次跳2級,此時跳法數目等於後面剩下的n-2級臺
階的跳法數目,即爲f(n-2)。
因此n級臺階時的不同跳法的總數f(n)=f(n-1)+ f(n-2)。
*/
#include <cstdlib>
#include <iostream>

int Fibonacci(int n){
  int prepre = 1;
  int pre = 2;
  int res = 0;
  for(int i = 3; i <= n; ++i){
    res = pre + prepre;
    prepre = pre;
    pre = res;
  }
  return res;
}

int main(int argc, char ** argv){
  int n = 5;

  int num = Fibonacci(n);

  std::cout<<num<<std::endl;

  system("pause");
  return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章