IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Рекурсия? Что же это такое?, Помогите
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


Ну так вот на многих сайтах с задачами (не только acmp.ru) я находил такое определение, как рекурсия. Не могли бы Вы рассказать всё (ну что Вы знаете), что нужно юному программисту, для знания данной темы.


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 195
Пол: Мужской
Реальное имя: Сергей

Репутация: -  2  +


Ну я так понял что в основном рекурсия выполняетя с помощью подпрограмм (процедур и функций)?


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Сергей Меркурьев @ 14.05.2009 15:26) *
рекурсия выполняетя с помощью подпрограмм (процедур и функций)?
Проще говоря, рекурсия - это когда подпрограмма (или функция) вызывается в ней самой. Ре-курс - буквально: повторный заход (как ре-монт - повторный монтаж).

Факторил - замечательный пример.
n! = 1*2*3*4..*(n-1)*n
- это его прямое определение.

А вот рекурсивное определение:
n! = (n-1)!*n
и
0!=1

Состаявляем функцию для его вычисления в соответствии с прямым определением:
function Fuctorial(n: integer): LongInt;
var
i: integer;
f: LongInt;
begin
f:=1;
for i:=1 to n do f:=f*i;
Factorial:=f
end;


А вот функция, составленная рекуррентно:
function Fuctorial(n: integer): LongInt;
begin
if n=0 then Factorial:=1 else Factorial:=n*Factorial(n-1)
end;


Вторая выглядит намного проще, согласись. Что происходит? Кога в нее заходишь, например, со значением n=3, она пытается умножить это значение на факториал двойки, который еще не знает. Она вызфывает функцию для вычисления этого факториала двойки, и уже та пытается 2 умножить на факториал 1. Снова то же самое: та вызывает факториал 0, чтобы вычислить факториал 1. И вот когда вызван факториал 0 - тогда происходит нечто другое: функция выходит со значением 1 в соответствии с первой частью условного оператора в ней.

А дальше разворачивается обратная цепочка. Вызов факториала 0 возвращает 1, домножает его на 1 и возвращает эту единицу экземпляру функции, который вызвал факториал 2. Та получает ее, домножает на 2 и возвращает. Следующий экземпляр функции получает эту двойку, домножает ее на 3 и снова возвращает полученную шестерку - теперь уже тебе.

Технически, происходит следующее. При каждом вызове функции всякий раз создается отдельная копия ее переменных, включая параметры. Именно с ними производятся действия, поэтому копии (экземпляры) функции они не мешают друг другу. При этом код (набор инструкций) только один.

Пример с факториалом - самый простой. Поиск по Форуму может дать тебе много интересных примеров)). Если будут трудности с поиском - пиши, я найду ченть.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Сергей Меркурьев   Рекурсия? Что же это такое?   14.05.2009 18:07
Ozzя   Берется любой хороший учебник по Паскалю и читаетс…   14.05.2009 18:14
Сергей Меркурьев   А в учебнике "В.Б. Попова Turbo Pascal для шк…   14.05.2009 18:16
volvo   В принципе, берется любой учебник по любому языку,…   14.05.2009 18:19
Ozzя   В Фаронове есть. http://pascal-books.narod.ru/boo…   14.05.2009 18:19
Сергей Меркурьев   Ну я так понял что в основном рекурсия выполняетя …   14.05.2009 18:26
Lapp   рекурсия выполняетя с помощью подпрограмм (процеду…   14.05.2009 20:02
Ozzя   Ну да. Найдите какие-нибудь классичсекие примеры. …   14.05.2009 18:30
volvo   Олег даже тему открывал в свое время для интересны…   14.05.2009 20:07
Lapp   Но что-то ее забросили. Андрей, если наткнешься на…   14.05.2009 20:45
Сергей Меркурьев   В общем то про факториал я знаю, и, что значение 3…   14.05.2009 23:35
Lapp   А вот не могли бы Вы сказать мне каким образом мож…   15.05.2009 0:00
Сергей Меркурьев   В принципе если Вас не затруднит рассказать мне пр…   15.05.2009 0:01
Lapp   В принципе если Вас не затруднит рассказать мне пр…   15.05.2009 0:09
Сергей Меркурьев   В принципе про рекурсия да!   15.05.2009 0:11
volvo   Ну, еще не мешало бы сказать про особый тип рекурс…   15.05.2009 14:27


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 5.05.2024 13:35
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name