#cpp #c
void preOrderTravers(Node* root) {
if (root) {
printf("%d ", root->data);
preOrderTravers(root->left);
preOrderTravers(root->right);
}
}
Как работает рекурсия?
Вот допустим, что в обходе бинарного дерева мы вышли на левый нижний узел. Я так
понимаю, формируются стек вызова рекурсивной функции, и, дойдя до тупика, машина переходит
на предыдущий шаг и выполняет preOrderTravers(root->right). Так, да? Просто я где то
что то читал но не могу сейчас найти.
Ответы
Ответ 1
Каждый вызов функции преобразуется в команду типа call xxx. В результате выполнения этой команды в стек заносится адрес возврата. Пока не достигнуто дно рекурсии функция не завершается, а вызывает сама себя. Когда достигается дно рекурсии функция завершается. При этом выполняется команда типа ret, которая выполняет переход по сохранённому в стеке адресу - происходит возврат на один уровень вверх. Таким образом, в случае дерева, функция вызывает себя до достижения листа, что является признаком дна рекурсии. После этого происходит возврат из вызванных функций.
Комментариев нет:
Отправить комментарий