|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.04.2010, 21:23 | #1 |
любитель-далеко не
Участник клуба
Регистрация: 13.04.2010
Сообщений: 1,156
|
рекурсивная функция))
Уважаемые форумчане! Уже второй день решаю простенькую(с точки зрения объёма кода) задачку и решить не могу ! моя рекурсивная функция,по идее, должна считать число вхождений элемента "b" в список. Я передаю в функцию указатель на последний элемент списка. Список состоит из записей ( type record) одно из полей информационное( у меня это integer) а другое-содержит указатель на предыдущий элемент. что-то не так , выполнял пошагово- так там ужас какой-то при исполнии компилятор(строка просто выделенная- не знаю как назвать)) заходит в функцию уже после того, как r=nil. не знаю что и думать. о- это просто глобальная переменная(пытался использовать чтобы сравнить результат с результатом ,который возвращает функция- но толку от этого мало) помогите, пожалуйста ))
вот она, эта функция - Код Delphi Код:
|
13.04.2010, 21:50 | #2 |
любитель-далеко не
Участник клуба
Регистрация: 13.04.2010
Сообщений: 1,156
|
Код:
|
13.04.2010, 22:38 | #3 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
абсолютно не думая, просто "пальцем в небо"...
а разве при r=nil не надо из процедуры выходить? вот так: Код:
|
14.04.2010, 10:03 | #4 |
любитель-далеко не
Участник клуба
Регистрация: 13.04.2010
Сообщений: 1,156
|
прям так и пишется? )) после "exit" не надо точку с запятой? хотя, сейчас попробую.)) спасибо за ответ))
------------------------------------------------------------------------------------------------------- попробовал сделать как вы посоветовали, но ничего не изменилось )) для трёх элементов список (1, 2, 3) моя функция при запросе для b=2 выдаёт ответ "fg=0" , а глобальная переменная "о=1" ( для глобальной переменной результат, получается, правильный) (дело в том, что я очередной элемент я добавляю в начало списка- потому функция перебирает значения в последовательности 3 - 2 - 1 ) не пойму в чём ошибка. да и из рекурсии выход выполняется, как только функция не вызывается ещё раз : Код:
Код:
Код:
Последний раз редактировалось vedro-compota; 14.04.2010 в 11:18. |
14.04.2010, 18:37 | #5 |
любитель-далеко не
Участник клуба
Регистрация: 13.04.2010
Сообщений: 1,156
|
Serge_Bliznykov, на тебя вся надежда. на 3-ёх форумах на мою просьбу отклинулся только ты.......можно на ты?
(товарищи модераторы не баньте меня за второе подряд сообщение- я и так предыдущее три раза редактировал))) ----------------------------------------------------------------------------------- не дождался вашего ответа сегодня- дождусь завтра)) Последний раз редактировалось vedro-compota; 15.04.2010 в 01:18. |
15.04.2010, 09:57 | #6 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
и на будущее, при наличии исходного кода, помочь намного легче!!!______________________
реконструрировал Ваш код... всё работает. и функция была вполне даже рабочая! (за исключением мелких глупостей, вроде передачи в рекурсивную процедуру глобальной переменной! ) и ещё. я чуть подшаманил логику... НО! У Вас БОЛЬШАЯ ошибка в логике работы со списком! Список создали и заполнили. А кто его удалять/освобождать память будет?! Пушкин?! (я код удаления не писал. возьмите по поиску, тут на форуме полно примеров работы с односвязным списком) Последний раз редактировалось Serge_Bliznykov; 15.04.2010 в 10:49. |
15.04.2010, 10:51 | #7 |
любитель-далеко не
Участник клуба
Регистрация: 13.04.2010
Сообщений: 1,156
|
вас понял)
буду делать, как вы сказали ) мне вот буквально час назад задачу эту объяснили ), если кому интересно:
ошибка была в том, что два последние условия(if) не были полностью независимы друг от друга . в результате если элемент обнаруживался в списке ,выполнялась последовательность команд: Код:
соответственно мы должны исключить возможность одновременного выполнения Код:
Код:
Код:
f Код:
Спасибо , Serge_Bliznykov'у ) буду следовать его советам) |
15.04.2010, 13:25 | #8 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
1) выкинь глобальную переменную o
2) я же предложил чуть другой вариант (был во вложении). Объедив идеи, получаем код: Код:
Последний раз редактировалось Serge_Bliznykov; 15.04.2010 в 13:30. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C++ Рекурсивная функция | Trinity13 | Помощь студентам | 10 | 15.10.2017 13:21 |
Рекурсивная функция | Skinnyman | Помощь студентам | 4 | 16.03.2010 18:05 |
Рекурсивная функция | Trinity13 | Помощь студентам | 8 | 14.02.2010 18:44 |
Си++. Рекурсивная функция. | Diamond2107 | Помощь студентам | 6 | 02.12.2009 19:48 |