@Kalim2828

Как понять работу рекурсии в C#?

Как понять работу return n * Factorial(n-1)...
Т.е у нас например есть число 4 , то у нас будет : return 4 * Factorial(3) и тогда нам возвращается 12, но куда оно возвращается? У нас потом получается , что n равно 12? Тогда у нас должно быть : return 12 * Factorial(11)...
Но у нас получается : return 12 * Factorial(2)

int factorial (int n) 
{ 
 if(n == 1) 
 { 
 return 1; 
 } 
 
 else 
 { 
 return n * factorial(n-1); 
 } 
 
 
 
 } 
Console.WriteLine(factorial(10));
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
otdameskapizm
@otdameskapizm
Помог ответ? Отметь решением...
Нет, после шага return 4 * factorial(3), будет шаг return 3 * factorial(2)
Потому что твое factorial(n - 1) на предыдущей глубине, будет тем самым factorial (n) для нового вызова функции. И так пока ты не дойдешь до терминального сценария (то есть то return 1)

return 4 * fact(4 - 1) == return 4 * (3 * (2 * 1))
return 3 * fact(3 - 1) == return 3 * (2 * 1)
return 2 * fact(2 - 1) == return 2 * 1


Поиграйся вот здесь: https://pythontutor.com/visualize.html#mode=edit
Тут неплохая визуализация того, что происходит
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
К рекурсии относусь негативно. Это во первых потенциальное место краша программы из-за переполнения стека. Во -вторых тот же код в цикле выглядит понятней, и вот таких вопрос не возникает.

int n = 10;
int factorial = 1;
for (int i = 1; i <= n; i++)
    factorial = factorial * i;


Да оно даже короче.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы