Привествую. Дамы и господа программисты, помогите, пожалуйста, разобраться в следующем:
Разбираюсь с рекурсией, черт дернул нацарапать следующий код:
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 лет балду пинал(((