1. 程式人生 > >上樓梯遞迴問題

上樓梯遞迴問題

時間限制: 1000 ms  空間限制: 262144 KB

題目描述

  樓梯有N級臺階,上樓可以一步上一級臺階,也可以一步上兩級臺階。編一程式,計算共有多少種不同的走法。

輸入

一行,一個整數n(1 <= n <= 30),表示臺階的級數

輸出

一個整數,走法的種數。

樣例輸入

3
樣例輸出

3
方案1:走三次,每次一步
方案2:先走一級,再走兩級
方案3:先走兩級,再走一次

為什麼是斐波拉契數列

因為你要上n階樓梯 只有 上f(n-1) 那上一步,或者從f(n-2)那上兩步

所以這樣就構成了遞迴式。

#include <stdio.h>  
  
typedef unsigned long long ULL;  
  
ULL stairs(int n)  
{  
    ULL f1=1, f2=2, temp;  
  
    if(n == 0)  
        return 0;  
    else if(n == 1)  
        return 1;  
    else if(n == 2)  
        return 2;  
  
    for(int i=3; i<=n; i++) {  
        temp = f1 + f2;  
        f1 = f2;  
        f2 = temp;  
    }  
  
    return f2;  
}  
  
int main(void)  
{  
    int n;  
  
    scanf("%d", &n);  
  
    printf("%lld\n", stairs(n));  
  
    return 0;  
}