|
|
|
| Поделитесь как вы вывели цепочку навигации в ваших статьях?
например тут:
http://softtime.ru/info/apache.php?id_article=98
| Работа с Apache | Подключение к PHP расширения для работы с MySQL
|
| |
|
|
|
|
|
|
|
для: kicher
(09.02.2007 в 15:03)
| | Тут помомему не используется... но как правило, прибегают к рекурсивному спуску. | |
|
|
|
|
|
|
|
для: cheops
(09.02.2007 в 19:14)
| | Зачем рекурсивный спуск на прямом пути?
Это же чистая итерация! | |
|
|
|
|
|
|
|
для: Trianon
(09.02.2007 в 19:21)
| | Здесь рекурсия не используется, к рекурсии удобно прибегать когда глубина каталога более 2-х позиций. | |
|
|
|
|
|
|
|
для: cheops
(09.02.2007 в 19:27)
| | >Здесь рекурсия не используется, к рекурсии удобно прибегать когда глубина каталога более 2-х позиций.
К рекурсии удобно прибегать, когда требуется обход дерева в глубину.
При обходе дерева в ширину, частным случаем которого с некоторой натяжкой можно назвать вычисление пути к корню, рекурсию применять удобно не более, чем для вычисления факториала. | |
|
|
|
|
|
|
|
для: Trianon
(10.02.2007 в 11:30)
| | Это зависит от структуры базы данных и передаваемых параметров - если мы находимся в произвольной точке дерева и нужно восстановить элементы от текущей точки до вершины имея только уникальный ключ текущей точки, мне проще использовать рекурсию. | |
|
|
|
|
|
|
|
для: cheops
(10.02.2007 в 13:12)
| | Решение этой задачи может зависеть от реализации структуры дерева.
Необходимость использования рекурсии (точнее отсутствие такой необходимости) от реализации не зависит.
Вот типичный код для наиболее популярного представления (Adjacency List):
(Он, конечно, слегка упрощен, но лишь выразительности ради)
<?
function get_path($id, $root_id = 0)
{
$list = '';
do{
$sql = "SELECT * FROM tab WHERE id = '$id'";
$res = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($res);
if($row == 0)
break;
$list = $row['name']. ' | ' . $list;
$id = intval($row['parent_id']);
} while($id != $root_id && $id != 0);
return ' | ' . $list;
}
?>
|
Могу привести похожий код для nested sets. По существу вопроса там мало что изменится. | |
|
|
|
|
|
|
|
для: Trianon
(10.02.2007 в 16:52)
| | Хитро, но использование рекурсии здесь оправдано, даже не смотря на то, что удалось найти "не страшный" заменитель рекурсии. Я наверное с удовольствием буду использовать ваше решение, ибо прозначно, но задачи "на деревья" всё равно продолжу решать рекурсивно - проще использовать устоявшиеся решения и библиотеки, чем решать по-новой хитрую задачу. Вообще говоря не известно, что лучше неявное использвование переменной в цикле или простетская рекурсия. | |
|
|
|
|
|
|
|
для: cheops
(10.02.2007 в 22:29)
| | Ничего хитрого. Мне кажется что это очевидно. Рекурсия нужна когда нам неизвестно количество родственников. В этом же случае - родитель всегда один. | |
|
|
|
|
|
|
|
для: Trianon
(09.02.2007 в 19:21)
| | а как сделать рекурсивный спуск на прямом пути? | |
|
|
|
|
|
|
|
для: Kicher
(10.02.2007 в 10:29)
| | Не скажу. Потому что рекурсивный спуск на прямом пути - это ересь мерзкая. Во всяком случае, с точки зрения человека, более менее представляющего рекурсивные структуры данных и алгоритмы, применяемые для работы с ними. | |
|
|
|