我对以下算法有疑问,
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堆栈内存中的行数(函数调用)是否相同?
答案 0 :(得分:1)
我看到的最大区别是,一个存储int
s,其他double
存储在堆栈中。
double
占用更多空间(通常是......您没有用语言标记问题)。
答案 1 :(得分:1)
每个递归步骤所需的堆栈空间取决于临时对象的数量及其类型。关于参数和返回项目也是如此。
正如大家所指出的,两个函数与返回类型有所不同 - 这是堆栈消耗更快的原因。