有M个台阶,一次只能跳一级或者是两级,问跳完这段台阶有多少不同的跳法。
跳台阶问题很容易想到递归求解。只剩一级时的跳法的总数加上只剩两级时跳法的总数。代码如下
#include<stdio.h>int f(int m){ if(m == 1) return 1; if(m == 2) return 1; return f(m - 1) + f(m - 2); } int main(){ int n, i, m; while(scanf("%d", &n) != EOF){ for(i = 0; i < n; i++){ scanf("%d", &m); if(m >= 1 && m <= 40) printf("%d\n", f(m)); } } }
还有一种复杂度相对简单的方法。使用数组。
#include<stdio.h> int num[41]= {0, 1, 1}; int main(){ int n, i, m; scanf("%d", &n); for(i = 3; i <= 40; i++) num[i] = num[i-1] + num[i-2]; while(n--){ scanf("%d", &m); printf("%d\n", num[m]); } }