上樓梯遞迴問題
阿新 • • 發佈:2019-01-03
時間限制: 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; }