跳台阶问题

有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]);
    }
        
    
}

 

posted on 2013-03-11 20:17  于敬晖  阅读(214)  评论(0编辑  收藏  举报

导航