|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.05.2009, 20:06 | #1 |
Пользователь
Регистрация: 10.01.2009
Сообщений: 71
|
Рекурсия - сложная задача!
Привет всем!
У меня такая проблема - я очень плохо понимаю сущность понятия рекурсия - само определение безусловно знаю, а применять на практике - полный ступор.. Подскажите решение следующей задачи: "Дано дерево глубины N, каждая внутренняя вершина которого имеет K(<10) непосредственных потомков (нумеруются от 1 до К)". Корень дерева имеет номер 0. Записать в текстовый файл с данным именем все возможные пути, ведущие от корня к листьям. Перебирать пути, начиная с "самого левого" и заканчивая "самым правым" (при этом первыми заменять конечные элементы пути). " Вот такое вот непонятное мне условие (не то что решение!). Кто может, помогите решить (лучше сегодня)! |
05.05.2009, 20:34 | #2 | |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Цитата:
Как я понял, содержимое файла будет примерно таким (при N = 4) Код:
Если текущая позиция = N+1, то записываем путь в файл и выходим из функции.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
05.05.2009, 20:41 | #3 |
Пользователь
Регистрация: 10.01.2009
Сообщений: 71
|
Спасибо за объяснение, тем не менее мне очень стыдно, но... я мало что уяснил почему путь будет выглядеть 0111,0112 и 0113... 0323 и т.д при N=4? тогда чему равно К и где она используется? Не могли бы вы, так сказать, "визуально" объяснить мне условие? И почему позиция должна доходить до N+1, а не до N?
|
05.05.2009, 20:49 | #4 | |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Ну смотрите. N - глубина дерева. В нашей программе это фактически количество вызовов рекурсивной функции для определения одного из возможных путей.
А K - количество листьев. То есть при каждом вызове функции нужно обходить еще каждый лист. Пусть N = 3, а K = 2. В общем виде путь будет выглядеть как-то так: Код:
Заголовок функции навскидку будет выглядеть так: Код:
s - строка, в которую мы пишем путь. Цитата:
Например, вызовем ее так: Код:
В самой функции нужно обойти все листья (перебрать все варианты). То есть будет цикл от 1 до K. В этом цикле мы вызываем функцию (себя, рекурсивно). Примерно так: Str(i,strnum); { преобразуем номер листа в строку и пишем в numstr } Код:
Ну а Код:
-------------------------- На самом деле, ничего особо сложного тут нет. Главное - разобраться.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
06.05.2009, 23:07 | #5 |
Пользователь
Регистрация: 10.01.2009
Сообщений: 71
|
Sazary, спасибо огромное, я немного разобрался! ничего если потом я вынесу на суд свой код при возможных неудачах?
|
06.05.2009, 23:14 | #6 | |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Цитата:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сложная задача | asale | Microsoft Office Excel | 6 | 07.04.2009 20:36 |
Сложная задача....можно ли решить? | Pleksy | Microsoft Office Excel | 1 | 23.02.2008 05:27 |
Простая и в то же время сложная задача | fiveelement | Microsoft Office Excel | 1 | 28.10.2007 21:03 |