|
45 / 30 / 11
Регистрация: 31.10.2009
Сообщений: 200
|
|||||||||||
"Рекурсивная функция" (Обход бинарного дерева)08.03.2010, 10:40. Показов 26343. Ответов 31
Метки нет (Все метки)
Привет всем, встретился с такой рекурсивной ф-ей, которая обходит бинарное дерево и выводит его на экран. Не могу понять как она работает
Объясните пожалуйста принцип работы такой функции. Заранее благодарен ) Добавлено через 1 минуту вот сама структура:
0
|
|||||||||||
| 08.03.2010, 10:40 | |
|
Ответы с готовыми решениями:
31
|
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
| 08.03.2010, 10:41 | |
|
Пойми сначала рекурсию, а потом и с функцией разберешься.
1
|
|
|
45 / 30 / 11
Регистрация: 31.10.2009
Сообщений: 200
|
||||||
| 09.03.2010, 12:46 [ТС] | ||||||
|
Рекурсивная функция, это функция которая вызыват саму себя
Добавлено через 3 часа 47 минут Люди, добрые, помjгите разобраться ![]() Добавлено через 22 часа 10 минут Вот весь код
1 6 8 10 20 25 21 30 Вот как я понимаю как работает функция print_tree: вызовы: 1) print_tree(10, 0); (лев. часть) 2) print_tree(6, 1); (лев. часть) 3)print_tree (1, 2); (лев. часть) 4)print_tree(нет левого поддерева, 3) (лев. часть) вывод "1" 5) print_tree (нет правого поддерева, 3); (лев. часть) все дальше не понятно как выводиться остальная часть поддерева ![]() Добавлено через 5 минут небольшая поправка: 5) print_tree (нет правого поддерева, 3); (прав. часть)
0
|
||||||
|
Заблокирован
|
|
| 09.03.2010, 13:01 | |
|
Тоже интересует данный вопрос присоединяюсь к автору темы
0
|
|
|
Фрилансер
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
|
||||||
| 09.03.2010, 13:05 | ||||||
|
Уважаемый, в чем именно надо разобраться? Весь смысл рекурсии ясен из самой программы - сначала напечатаем левое поддерево, потом корень, потом правое поддерево. А если неясен сам процесс - неужели трудн натыкать печатей и получить протокол:
нажмите, чтобы увидеть
2
|
||||||
|
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
|
||||||
| 09.03.2010, 13:12 | ||||||
|
а лучше преобразуйте функцию print_tree
1
|
||||||
|
45 / 30 / 11
Регистрация: 31.10.2009
Сообщений: 200
|
|
| 09.03.2010, 13:19 [ТС] | |
|
для чего вообще использовать рекурсию мне не понятно , помоему кроме запутанного, но короткого кода никаких преимуществ
0
|
|
|
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
|
||
| 09.03.2010, 13:31 | ||
|
1
|
||
|
45 / 30 / 11
Регистрация: 31.10.2009
Сообщений: 200
|
|
| 09.03.2010, 13:34 [ТС] | |
|
kuroiryuu, можно конкретную задачку? помоему для любого рекурсивного алгоритма можно создать его нерекурсивный аналог
0
|
|
|
Фрилансер
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
|
||
| 09.03.2010, 13:43 | ||
|
1
|
||
|
45 / 30 / 11
Регистрация: 31.10.2009
Сообщений: 200
|
|
| 09.03.2010, 14:02 [ТС] | |
|
не знаю, может быть с опытом будет проще понимать рекурсию, у нее все равно есть главный недосток - все параметры функции при каждом вызове копируются в стек, к-ый может переполниться
0
|
|
|
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
|
||
| 09.03.2010, 14:14 | ||
|
а потом тоже самое, но с рекурсией
1
|
||
|
Модератор
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
|
||||||
| 09.03.2010, 18:20 | ||||||
|
_Eldar_, обошлось без рекурсии, но вроде и дерево создаётся, и печатается... Короче вот:
1
|
||||||
|
45 / 30 / 11
Регистрация: 31.10.2009
Сообщений: 200
|
|
| 10.03.2010, 00:57 [ТС] | |
|
Спасибо всем отозвавшимся))
kuroiryuu, я пока такую задачу точно не решу, я только консольные приложения пишу, да я понимаю что запись будет короче с рекурсией, с примером сталкивался (быстрая сортировка массива), я имел в виду что любой рекурсивный алгоритм можно преписать нерекурсивным. easybudda, спасибо , но до изучения классов я еще не дошел
0
|
|
|
Фрилансер
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
|
|
| 10.03.2010, 08:21 | |
|
На мой взгляд, Вы делаете определенную подмену понятий. Вы всё время делаете упор на то, что рекурсивный код получается более короткий. Но бывает такая краткость, которая только запутывает. На мой взгляд, тут наоборот, рекурсивный код получается более логичный и понятный.
1
|
|
|
328 / 312 / 68
Регистрация: 05.11.2009
Сообщений: 712
|
||
| 10.03.2010, 09:37 | ||
|
там где уместны циклы используй циклы, а где рекурсии - рекурсии.
0
|
||
|
paladin
286 / 187 / 7
Регистрация: 25.02.2009
Сообщений: 589
|
|
| 10.03.2010, 10:03 | |
|
Пример, когда рекурсия не подойдет: нарисуйте какой-нибудь фрактал с глубиной в 10^n. Для определенных n "Stack overflow error" обеспечен.
1
|
|
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
|
| 10.03.2010, 11:16 | |
|
Данный алгоритм, можно организовать и без рекурсии с помощью дополнительной динамической структуры допустим: стек: так как стек позволяет запоминать направления движения по графу.
С рекурсией присутствует стек: так сказать аппаратный(на уровне компилятора), он то и позволят запоминать шаги, для дальнейшего продвижения по графу.
0
|
|
|
Фрилансер
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
|
||
| 10.03.2010, 11:25 | ||
|
Во-первых, Вы путаете отвлечённое логическое понятие рекурсии и вполне определенную форму реализации этой рекурсии. Соответственно, рекурсию как форму записи алгоритма и рекурсию как способ выполнения. Вполне можно представить себе компилятор, убирающий лишние стековые итерации. Вы, вероятно, слышали термин "хвостовая рекурсия", возникший как раз вокруг этой проблематики? Во-вторых, что нам мешает сделать стек поглубже, а стековых переменных - поменьше? Пару гигов на стек - и золотой ключик у нас в кармане. А когда вычисления подходят к границе ресурсов, тут уж поневоле приходится усложнять алгоритмы. Это не только с рекурсией, простая сортировка ведет себя не лучше при возрастании объемов сортируемой информации.
0
|
||
|
1261 / 799 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
|
||||||
| 10.03.2010, 11:51 | ||||||
|
Вывод без рекурсии общий принцип: на основе ДСД: стека.
2
|
||||||
| 10.03.2010, 11:51 | |
|
Помогаю со студенческими работами здесь
20
Обход бинарного дерева Обход бинарного дерева в ширину НЕрекурсивный обход бинарного дерева Как осуществлять обход бинарного дерева? Обход бинарного дерева без рекурсии Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|