@RomKing

Почему выполнение рекурсивного метода в C# добавляет лишнее звено при выполнении?

Привествую. Дамы и господа программисты, помогите, пожалуйста, разобраться в следующем:
Разбираюсь с рекурсией, черт дернул нацарапать следующий код:
static void Method(int value) 
{
   value++;   
   Console.WriteLine($"A = {value}");                  

    if (value < 5)                           
           Method(value);

   Console.WriteLine($"B = {value}");
}

 static void Main(string[] args)
 {
   Method(2);
 }


На консоль выводится так:
A = 3
A = 4
A = 5
B = 5
B = 4
B = 3

Хоть убейте не могу дотукаться какого лешего появляется тройка в последней строке консоли?
Следуя последовательности шагов получается так:
1. value = 2,
2. value инкрементируется (теперь 3). Выводится на консоль: А=3
3. Выполняется блок If - вызывается метод,
4. В этом повторно вызываемом методе значение инкрементируется и теперь value = 4. Выводится на консоль: А=4
5. Снова выполняется тело блока If - вызывается метод.
6. Инкрементируется value и на консоль выводится: А=5
7. Далее if не выполняется, проскакиваем и попадаем на вторую конструкцию Console.WriteLine. На коносоль выводится: B=5


Дальше не понимаю, что присходит. Вроде бы на этом программа должна завершить свою работу, все вызовы метода закончились, но она возврщается в метод еще два раза. Появление четверки после пяти я еще правдами и неправдами попытался себе объяснить, но с тройкой вообще беда...
Четверка во втором случае объяснил себе тем, что после полного завершения работы if, попадаем, с сохраненной ранее во внешнем методе четверкой, в последнюю строку Console.WriteLine. Но троечка откуда берется, будь она неладна????
Шибко ненавижу теперь все тройки)

P.s. Доперло с 10-го раза. Причем 11-летний сын понял с первого раза, просто мне не мог объяснить))). Теперь понятно, почему работодатели предпочитают брать на работу молодых программеров. В 40 лет мозг не такой шустрый, особенно если до этого 25 лет балду пинал(((
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
HemulGM
@HemulGM
Delphi Developer, сис. админ
Потому что ты не выходишь из метода, если условие не выполняется

if (value < 5)                           
           Method(value)
else return;


Дальше не понимаю, что присходит.

Дальше у тебя происходит выход из всех методов Method, и каждый выход из такого метода завершается у тебя
Console.WriteLine($"B = {value}");
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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