| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > return и рекурсия |
| Автор: Raily 1.11.2011, 11:54 | ||
У меня такой вопрос - написала рекурсию, приводить код тут не буду - длинный он, с множеством циклов внутри рекурсии (в основном циклы for). В определённые моменты я пытаюсь выйти из рекурсии и возвратить себе значение, пишу следующее:
Пропечатка стоит для того, чтобы понять, что в данный else осуществлён вход. Так вот пропечатка выводится на экран, но при этом выход из рекурсии не осуществляется - продолжается проход по её внутренним циклам. У меня такой вопрос - я думала, что return тут же прерывает скрипт, типа exit, только ещё и возвращается нужное значение, это не так? $obj_el всегда имеет какое-то значение. Вопрос - почему не осуществляется выход из рекурсии, как работает return? |
| Автор: CruorVult 1.11.2011, 12:04 |
return должен выйти из текущей рекурсивной процедуры, но если запущены еще другие - то соответсвенно продолжится выполнения. Т.к. весь код не приведен - то сказать точно, что не так не могу. |
| Автор: Evghenusi 1.11.2011, 12:06 |
| у меня подозрение что автору нужен break Добавлено через 2 минуты и 35 секунд p.s. понравилось выражение "Пропечатка", намотаю на ус |
| Автор: CruorVult 1.11.2011, 12:09 | ||||
эмм..если был бы
то возможно, а так
|
| Автор: Raily 1.11.2011, 12:20 | ||
| Приведу код, но сильно не пугайтесь - да, он ужасен, но с рекурсиями и деревьями у меня вечные проблемы. Смысл задачи вот в чём - мне приходит XML, содержащий в тегах элементы HTML в определённом виде, мне нужно из XML сделать объект вида: obj[0]->id=1, obj[0]->id=name1, obj[1]->id=2, obj[1]->name=name2 и т.д. Первая функция берёт XML - пока из файла, а затем идёт в функция xml_to_object, которая преобразует объект XML в нужного мне вида объект. В конце функции xml_to_object у меня наставлено много return, вот пропетачки там выводятся, а выход из функции не осуществляется - продолжается пробежка по циклу for($i=$count_level[$n];$i<$count_lev[$n];$i++){} Не знаю, можно ли по этому коду что-то подсказать, но вдруг))
Добавлено через 1 минуту и 24 секунды Могу привести пример XML из файла. Добавлено через 3 минуты и 42 секунды забыла написать, что в возвращаемом объекте для каждого элемента прописано количество Child из XML, то есть объект содержит не только id и name xml-элементов |
| Автор: Raily 2.11.2011, 12:21 | ||
У меня вопрос по поводу "текущей рекурсивной процедуры" - а как определить их количество? К примеру - рекурсия запустила саму себя 5 раз, у меня получается 5 текущих рекурсивных процедур? Нашла ошибку! Спасибо, что навели меня на мысль!!! |