я следующую степенную функцию, что я написал в C#:Почему эта функция питания вызывает переполнение стека C#
public static double pow2(double x, double n)
{
if (n == 0)
return 1;
else
{
stepAccumulator++;
return pow2 (x, Math.Floor (n/2.0)) * pow2 (x, Math.Ceiling (n/2));
}
}
Когда я запускаю программу, я просто сказать result=pow2(1,1000);
, а затем время функции, используя Stopwatch
объект, а затем распечатать результат в конце. К сожалению, когда я запускаю эту программу, я получаю следующую ошибку: Процесс завершается из-за StackOverflowException. Почему это происходит и как я могу остановить его?
Еще раз я должен спросить: больше не нужно отлаживать код? Наверняка вы поставили бы точку останова наверху и каждый раз проверяли значение 'n'? Если вы сделали это, почему бы не сказать нам результаты? Если вы этого не сделали, почему бы не сделать это? – John3136
, потому что n/2 никогда не 0 –
Nah, n достигает 0. В точке останова n = 1000, n = 500, n = 250, n = 125, .. n делится на два каждый раз и как только достигает 0, это никогда не возвращает 1 с 'if (n == 0) {return 1;}' и просто продолжает колебаться между 0.0 и 1.0 – Chizx