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

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

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

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


Бывалый
***

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

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


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


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


Бывалый
***

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

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


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


--------------------
♣♣♣
"Себя великим не считай, гордясь величьем предков,
Величья не добудешь ты и золота ценою!
Хоть светит на небе луна, но отраженным светом -
Чужою славой не живи, не будь второй луною!!!"
♣♣♣
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 14.05.2009 16:02
Сообщение #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 14:07
Ozzя   Берется любой хороший учебник по Паскалю и читаетс...   14.05.2009 14:14
Сергей Меркурьев   А в учебнике "В.Б. Попова Turbo Pascal для шк...   14.05.2009 14:16
volvo   В принципе, берется любой учебник по любому языку,...   14.05.2009 14:19
Ozzя   В Фаронове есть. http://pascal-books.narod.ru/boo...   14.05.2009 14:19
Сергей Меркурьев   Ну я так понял что в основном рекурсия выполняетя ...   14.05.2009 14:26
Lapp   рекурсия выполняетя с помощью подпрограмм (процеду...   14.05.2009 16:02
Ozzя   Ну да. Найдите какие-нибудь классичсекие примеры. ...   14.05.2009 14:30
volvo   Олег даже тему открывал в свое время для интересны...   14.05.2009 16:07
Lapp   Но что-то ее забросили. Андрей, если наткнешься на...   14.05.2009 16:45
Сергей Меркурьев   В общем то про факториал я знаю, и, что значение 3...   14.05.2009 19:35
Lapp   А вот не могли бы Вы сказать мне каким образом мож...   14.05.2009 20:00
Сергей Меркурьев   В принципе если Вас не затруднит рассказать мне пр...   14.05.2009 20:01
Lapp   В принципе если Вас не затруднит рассказать мне пр...   14.05.2009 20:09
Сергей Меркурьев   В принципе про рекурсия да!   14.05.2009 20:11
volvo   Ну, еще не мешало бы сказать про особый тип рекурс...   15.05.2009 10:27


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

 



- Текстовая версия 22.07.2025 5:58
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"