У меня есть вопрос о следующих алгоритмах,стек, из памяти в рекурсии
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));
}
}
Я побежал сумму (10000) и факториал (10000), я получил ошибку переполнения стека от запуска факториала (10000), но не сумма (10 000). почему это? Не совпадает ли количество строк (вызов функции) в стеке?
Возможно, потому что 10 000! на порядки больше, чем число атомов во Вселенной. –
Удваиваются больше. –
@musical_coder: не имеет значения. –