этой функции а как же следующие строчки? как оно тогда возвращает значение. Или оно и вторую функцию тоже вызывает. Короче, я настолько запутался что и сложно обьяснить и сложно понять
Когда условие выхода сработает - все начнет раскручиваться назад, и там код "пойдет дальше"
Мы заходим в первую функцию, доходим до вызова первой "подфункции", вызываем ее. При этом пока не закончится этот вызов, поток выполнения не пойдет дальше в этой функции. Поток выполнения уходит на более глубокие вызовы, но состояние старых (внешних) вызовов остаётся на стеке, пока поток выполнения не вернётся обратно к ним. То есть, другими словами, у нас есть вершина дерева, от нее отходят две ветки, пока мы не посчитаем одну, мы не приступим к расчету второй. И так же для более низких веток, считается сначала одна половина подветок, потом вторая. Я на самом деле чувствую, что сейчас ещё больше запутал. Я советую все таки представить или лучше нарисовать дерево из одной ноды и вызвать на ней в голове или на листочке функцию. Потом двухуровневое дерево из трёх нод. Потом добавить ещё пару нод. Рекурсию проще понять постепенно идя от тривиальных случаев к более сложным. Нет смысла начинать с целого большого дерева.
Обсуждают сегодня