台阶问题(1or2)

来源:互联网 发布:保湿水推荐 知乎 编辑:程序博客网 时间:2024/05/20 08:23

方案一:用递归实现(用递归可以将问题分解成规模更小的问题)

 #include <stdio.h>
int fun(int m)
{
    if(m==0)
        return 1;
    if(m==1)
        return 1;
    return fun(m-1)+fun(m-2);
}
int main()
{
    int n;
    scanf("%d",&n);
    while(n--)
    {
        int m;
        scanf("%d",&m);
        if(m==1)
            printf("0\n");
        else
        printf("%d\n",fun(m-1));
    }
    return 0;
}
上面这种方案会超时
方案二 斐波那契数列

当m=1时,要特别分出,其他就是斐波那契数列

#include <stdio.h>
int main()
{
    int i,n;int a[41];
    a[1]=0,a[2]=1;a[3]=2;
    for(i=4;i<41;i++)
        a[i]=a[i-1]+a[i-2];
    scanf("%d",&n);
    while(n--)
    {
        int m;
        scanf("%d",&m);
        if(m==1)
            printf("0\n");
        else
        printf("%d\n",a[m]);
    }
    return 0;
}

原创粉丝点击