Рекурсия. Как происходит вход в условие

248
02 мая 2017, 03:50

Имеется такая функция, которая вызывает сама себя, то есть рекурсивная. Допустим n = 5. Нужно посчитать сумму элементов, которые отобразятся на консоль (но это просто к слову).

Сначала вроде все понятно. Последовательность будет такой 5 4 3 2 1 0. Вот дальше не могу понять, в дебаге это выглядит так так - 0 по условию не подходит и естественно в тело if не попадает, но по достижению последней скобки, в обратную сторону идет(то есть выполнение функции начинается не сначала, а с конца) На фото последовательность вызовов и каким-то образом попадает в if и n = 1. Как это происходит? Я не могу понять

static public void F(int n)
    {
        Console.Write(n + " ");
        if (n > 0)
        {
            F(n - 1);
            F(n - 3);
        }
    }

Answer 1

В этом суть рекурсии, она вызывает сама себя, потом возвращает управление, но в то место, где была вызвана

Поэтому получается, что сначала функция уходит вглубь и доходит до n равное 0, потом потом возвращает управление предыдущей функции, где n ещё было равно единице и заходит в функцию F(n-3); где становится равным -2, потом возвращает значение функции, где n равно единице, потом происходит выход и из неё, где она возвращает управление функции, где n равно 2 и т.д.

Хороший способ понять рекурсию обойти дерево в глубину.

READ ALSO
Как сделать простейший клиент для базы данных MSSQLS Express в Windows Forms приложении на C#

Как сделать простейший клиент для базы данных MSSQLS Express в Windows Forms приложении на C#

Сейчас я только понял как добавить в источники данных БДДальше не могу понять, как поступить дальше

254
Не виден picterbox на форме?

Не виден picterbox на форме?

Ругается на picturebox1 - хотя на форме он естьВо время выполнения NullReferenceException

227
WCF Callback for UDP

WCF Callback for UDP

Как в WCF, получая и отправляя данные по UDP использовать Callback?

226
Установка windows службы

Установка windows службы

В командной строке работает:

561