Другие уже отметили ошибку, и я остановлюсь на рекурсии.
Хотя C # в настоящее время не выполняет оптимизацию хвостового вызова (хотя IL имеет специальную инструкцию tail
), стоит упомянуть, что хвостовая рекурсия, как правило, хорошая вещь.
Хвостовая рекурсия - это особый случай рекурсии, в котором последняя операция функции, хвостовой вызов, является рекурсивным вызовом. Поскольку последний вызов является рекурсивным, нет необходимости сохранять кадр стека вызывающей функции, и компилятор может легко использовать эту информацию для генерации машинных инструкций, так что стек вообще не увеличивается. Так что он может превратить рекурсивную функцию в итеративную.
Переписать ваш код для поддержки хвостовой рекурсии можно следующим образом:
static int Sum(int result, int value)
{
if(value == 0)
return result;
return Sum(result + 1, value - 1);
}