递归的内存超出问题

校acm网上的题斐波那契数列

#include

int Fibonacci(int n)
{
    if (n == 0)
        return 0;
    else if (n == 1)
        return 1;
    else
        return Fibonacci(n-1) + Fibonacci(n-2);
}
int main()
{
    int n;
    do {
        scanf("%d",&n);
    } while (0>n&&n>40);
    printf("%d",Fibonacci(n));
    return 0;

}

这种情况往往会超时。

#include 
int main(void)
{
    int n, f1, f2, f3,i;
    
    f1 = 0;
    f2 = 1;
    scanf("%d", &n);
    
    if (0== n)
        f3 = 0;
    else if (1 == n)
        f3 = 1;
    else
    {
        for (i=2; i<=n; ++i)
        {
            f3 = f1 + f2;
            f1 = f2;
            f2 = f3;
        }
    }
    printf("%d\n",f3);
    
    return 0;
}

所以尽量不要用递归


你可能感兴趣的:(C)