Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рекурсия 
:(
    Опции темы
Katerina
Дата 26.2.2007, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.12.2006

Репутация: нет
Всего: нет



если в какой-нибудь простой задаче с последовательностью нужно используя рекурсивные ф-и распечатать первые n членов, удовлетворяющие данному условию, то имеется в виду, что каждый следующий элемент будет искаться рекурсивно или вообще весь алгоритм нужно написать рекурсивно? Если последнее, то как. Намного проще через обычный цикл

заранее спасибо
PM MAIL   Вверх
Zero
Дата 26.2.2007, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Katerina @  26.2.2007,  07:47 Найти цитируемый пост)
что каждый следующий элемент будет искаться рекурсивно или вообще весь алгоритм нужно написать рекурсивно?

что значит весь алгоритм рекурсивно???
Ну к примеру, если у тебя задача будет заключаеться в том, чтобы найти факториал, то там умножение на самого себя уменьшеного на единицу целесообразно сделать рекурсивно. Можно и через цикл, но долшье работать и смотреться будет более запутанно.
А если в задании сказано что-то конкретно через рекурсию сделать, то это что-то и надо будет делать именно так.
PM MAIL ICQ   Вверх
SoWa
Дата 26.2.2007, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: нет
Всего: 74



Пишешь рекурентную функцию.
Примерно такого типа
Код

function F1(symb: integer): boolean;
begin
 //Условие, сообщение о результате//
 //Условие выхода//
 F1(symb+1);
end;



--------------------
Всем добра smile
PM MAIL ICQ   Вверх
corpsehunter
Дата 26.2.2007, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.2.2007

Репутация: нет
Всего: 3



В математике, если я не ошибаюсь,  понятия "рекурсивные функции" вроде бы нет, как и рекурсивных последовательностей. Ты наверно имела ввиду рекурентные - в них каждый член можно получить, зная только несколько предыдущих членов. Большинство (если, вообще не все) можно реализовать как через обычный цикл, так и через рекурсию.
Если проще сделать цикл - лучше делай цик, он и работает быстрее.
Но, если сказано, что надо использовать рекурсивные функции, то это, скорее всего говорили о реализации, т.е. лучше делать рекурсией.
А вообще, слишком неконкретно поставлен вопрос.
--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
Katerina
Дата 26.2.2007, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.12.2006

Репутация: нет
Всего: нет



Цитата(Zero @  26.2.2007,  08:27 Найти цитируемый пост)
А если в задании сказано что-то конкретно через рекурсию сделать, то это что-то и надо будет делать именно так. 


Там сказано не конкретно. Текст задания: используя рекурсивную ф-ю распечатать первые 10 членов последовательности xn=3x(n-1)-20, x0=2, которые больше 7.
 Здесь рекурсивно оформляется последовательность, как отдельная ф-я, а алгоритм сравнения пишется через for как обычно? Или они имеют ввиду что-то другое?
PM MAIL   Вверх
MBo
Дата 26.2.2007, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: нет
Всего: 18



Katerina, 
у тебя же написано - используя рекурсивную ф-ю 

Вот и сделай
function Calc(N: Integer): Integer;
begin
  if N =0 then 
    Result := 2
  else
    Result := 3 *Calc(n-1) - 20
end;

однако  которые больше 7 - таких не будет, поскольку, все, кроме первого члена, будут отрицательными



Zero, 
>найти факториал, то там умножение на самого себя уменьшеного на единицу целесообразно сделать рекурсивно. Можно и через цикл, но долшье работать и смотреться будет более запутанно

Вовсе нет, циклом быстрее.


PM MAIL   Вверх
Zero
Дата 26.2.2007, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(MBo @  26.2.2007,  10:00 Найти цитируемый пост)
Zero, 
>найти факториал, то там умножение на самого себя уменьшеного на единицу целесообразно сделать рекурсивно. Можно и через цикл, но долшье работать и смотреться будет более запутанно

Вовсе нет, циклом быстрее.

Стоп, попутал.... smile Достоинством рекурсии являеться компактная запись. А скорость действительно ниже.
Цитата(Katerina @  26.2.2007,  08:44 Найти цитируемый пост)
Здесь рекурсивно оформляется последовательность, как отдельная ф-я, а алгоритм сравнения пишется через for как обычно?

Да именно так... Саму функцию ты можешь оформить как написал MBo, только незабудь туда ещё x вставить... smile  smile А сам алгоритм сравнения с числом 7 пиши через форы.
Цитата(MBo @  26.2.2007,  10:00 Найти цитируемый пост)
однако  которые больше 7 - таких не будет, поскольку, все, кроме первого члена, будут отрицательными

Ну если х=1, то да, а иначе нет. smile  smile 
PM MAIL ICQ   Вверх
corpsehunter
Дата 26.2.2007, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.2.2007

Репутация: нет
Всего: 3



Цитата(Katerina @ 26.2.2007,  08:44)
Там сказано не конкретно. Текст задания: используя рекурсивную ф-ю распечатать первые 10 членов последовательности xn=3x(n-1)-20, x0=2, которые больше 7.
 Здесь рекурсивно оформляется последовательность, как отдельная ф-я, а алгоритм сравнения пишется через for как обычно? Или они имеют ввиду что-то другое?

Я же писал - рекурсивной последовательности нет. Последовательность рекуррентная. И связана она рекуррентной форумлой. Термин "рекурсия" используется, в основном, только в информатике, ну и в дискретной математике.
Значит, раз сказано "используя рекурсивную функцию" это значит имеется ввиду способ реализации (с помощью рекурсивной функции), так что цикл не катит smile 
--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
Zero
Дата 26.2.2007, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



corpsehunter, внимательней читай посты и то что в них спрашиваеться.
PS: это не раздел математики.
PM MAIL ICQ   Вверх
corpsehunter
Дата 26.2.2007, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 24.2.2007

Репутация: нет
Всего: 3



Цитата(Zero @ 26.2.2007,  11:54)
corpsehunter, внимательней читай посты и то что в них спрашиваеться.
PS: это не раздел математики.

Я, как раз, внимательно и прочитал: вся проблема возникла в том, что она не разобралась в терминах. Конкретный вопрос был: что имелось ввиду в формулировке задачи. Так что, если вникнуть в суть самих терминов, то и вопроса никакого не возникнет.
--------------------
Тест на IQ показал отрицательный результат...
PM MAIL   Вверх
MBo
Дата 26.2.2007, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: нет
Всего: 18



Zero, 
>Ну если х=1, то да, а иначе нет

Может, я не так понял задание, но для приведенной рекуррентной зависимости xn=3x(n-1)-20, x0=2:
n: x[n]
0: 2
1: -14
2: -62
3: -206
4: -638
5: -1934
6: -5822
7: -17486
8: -52478
9: -157454
 

Общая формула для рек. последовательности x(n) = a*x(n-1)+b при данном x(0) такая:
x(0)*a^k-b/(a-1)+b*a^k/(a-1)

для a=3 и и b=-20
3^k*x(0)+10-10*3^k=3^k(x(0)-10)+10






Это сообщение отредактировал(а) MBo - 26.2.2007, 13:27
PM MAIL   Вверх
Zero
Дата 26.2.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(MBo @  26.2.2007,  13:16 Найти цитируемый пост)
Может, я не так понял задание, но для приведенной рекуррентной зависимости xn=3x(n-1)-20, x0=2:
n: x[n]
0: 2
1: -14
2: -62
3: -206
4: -638
5: -1934
6: -5822
7: -17486
8: -52478
9: -157454

MBo, ты задание понял правильно, но только х, ты посчитал знаком умножения и в программе не учёл. smile 
PM MAIL ICQ   Вверх
MBo
Дата 26.2.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 10.6.2002

Репутация: нет
Всего: 18



Zero, 
>только х, ты посчитал знаком умножения и в программе не учёл

нет, я посчитал,что х -обозначение последовательности, т.е. вот так:
X[n] = 3*X[n-1] - 20
(а иначе не было бы смысла приводить x0)

PM MAIL   Вверх
Zero
Дата 26.2.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



 smile Ну может и так... Тут надо видеть задание на бумаге как оно есть.
PM MAIL ICQ   Вверх
Kuvaldis
Дата 26.2.2007, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: нет
Всего: 61



Цитата

Общая формула для рек. последовательности x(n) = a*x(n-1)+b при данном x(0) такая:
x(0)*a^k-b/(a-1)+b*a^k/(a-1)

Плохо, что не приводишь доказательства. Придется мне smile 

Это сообщение отредактировал(а) Kuvaldis - 26.2.2007, 21:24

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  ______________.zip 6,29 Kb


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0673 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.