堆栈在递归中耗尽内存

时间:2013-10-07 22:20:59

标签: recursion

我对以下算法有疑问,

public static int sum(int x){
    if (x == 0 || x==1)
    {
        return x;
    }
    else 
        return x + sum(x-1);

}

public static double factorial(int x)
{
    if (x==0 || x==1)
    {
        return 1;
    }
    else 
    {
        return (double)(x*factorial(x-1));
    }
}

我运行了总和(10,000)和阶乘(10,000),运行因子(10,000)但没有总和(10,000)的堆栈溢出错误。这是为什么? Aren堆栈内存中的行数(函数调用)是否相同?

2 个答案:

答案 0 :(得分:1)

我看到的最大区别是,一个存储int s,其他double存储在堆栈中。

double占用更多空间(通常是......您没有用语言标记问题)。

答案 1 :(得分:1)

每个递归步骤所需的堆栈空间取决于临时对象的数量及其类型。关于参数和返回项目也是如此。

正如大家所指出的,两个函数与返回类型有所不同 - 这是堆栈消耗更快的原因。