|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.12.2011, 18:13 | #1 |
Форумчанин
Регистрация: 05.06.2010
Сообщений: 154
|
Не пойму как работает рекурсия
Вот процедура прямого обхода дерева.
Код:
Если не выполняется probh(node.pRight); Но вот не могу понять как это происходит. Они же в одном begin-end стоят. Помогите разобраться |
15.12.2011, 19:15 | #2 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Не можешь понять, потому что неправильно трактуешь.
Если условие выполняется, то они вызываются оба. Один за другим - ровно как и написано. Если условие не выполняется, то мало того, что ни один из них не вызывается, так ещё и в form1.Edit1.Text ничего не приписывается.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
15.12.2011, 19:25 | #3 |
Веб-дизайнер
Форумчанин
Регистрация: 11.08.2011
Сообщений: 305
|
googl, присоединившись к предыдущему оратору разъясню:
Код:
|
15.12.2011, 19:29 | #4 | |
Форумчанин
Регистрация: 05.06.2010
Сообщений: 154
|
Цитата:
вот посмотрите программу |
|
15.12.2011, 19:32 | #5 |
Форумчанин
Регистрация: 05.06.2010
Сообщений: 154
|
123
Поставьте точку останова при записывании в едит и дальше выполняйте пошагово. процедура же заново вызывается, поэтому до Right не доходит. а Right выполняется только тогда когда nil вот я и не пойму. Это же все из-за рекурсии. я просто не пойму каким образом это происходит. вы не поняли суть
|
15.12.2011, 19:32 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
наверно потому что вы не доглядели что при рекурсии вы вечно входите в эту же функцию снова и снова?
и пока не будет условие false, вы не увидите перехода ко второму вызову самого себя. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
15.12.2011, 19:34 | #7 |
Веб-дизайнер
Форумчанин
Регистрация: 11.08.2011
Сообщений: 305
|
Может быть так:
Код:
|
15.12.2011, 19:34 | #8 | ||
Форумчанин
Регистрация: 05.06.2010
Сообщений: 154
|
123
Цитата:
Цитата:
|
||
15.12.2011, 19:35 | #9 |
Веб-дизайнер
Форумчанин
Регистрация: 11.08.2011
Сообщений: 305
|
googl, честно говоря я не понимаю Вашего условия. Как можно сделать какую-либо операцию с Node если его значение равно nil? (Вы пытаетесь сделать vyvod(node.pLeft,tmpItem) при пустом узле, зачем?)
|
15.12.2011, 19:36 | #10 | |
Форумчанин
Регистрация: 05.06.2010
Сообщений: 154
|
Цитата:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программа не работает в Code Block, не пойму почему. | Stunt Man | Помощь студентам | 1 | 03.06.2011 19:38 |
Не пойму зачем не работает?! | Jone200991 | Помощь студентам | 0 | 31.05.2011 14:45 |
Не пойму как работает цикл | Lotles | Общие вопросы C/C++ | 4 | 29.11.2010 02:08 |
не пойму правильно ли работает программа | серг | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 13.05.2010 14:58 |
Паскаль. рекурсия. числа. объясните, как работает код | [silver beast] | Помощь студентам | 2 | 21.01.2009 05:00 |