跳台阶问题

有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]);
    }
        
    
}
原文地址:https://www.cnblogs.com/yujinghui/p/2954577.html