Модераторы: Alx, Fixin

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Вы-ыВерните Ваш мозг, Задача по Программированию! 
:(
    Опции темы
TwisT_X
Дата 23.2.2005, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


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

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



А для чего нужна рекурсия , я не понимаю? Ведь с ней функции вычисляются гараздо дольше..


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
sergejzr
Дата 23.2.2005, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Реурсия более понятна человеку. Код короткий. Легко читается. Не надо лишних контейнеров.
Но на практике она сакс конечно.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
cardinal
Дата 23.2.2005, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



А бывают случаи, когда без нее никак. Вот например поиск файлов у тебя на винчестере это чисто рекурсионная процедура. Цикл сделать для этой задачи невозможно, так как твоя файловая система это древовидная структура, глубина которой (то есть кол-во папок в папке в подпапке такой-то папки smile) неизвестна.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
sergejzr
Дата 23.2.2005, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



cardinal smile для этого используем стек или queue.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
TwisT_X
Дата 23.2.2005, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


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

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



Цитата
сакс
Как это понять?.

Ну вот смотри пример рекурсии на факториалах( На языке паскаль):

Код

function factor1(n: integer): Int64;
var i: integer;
begin
Result := 1;
for i := 2 to n do
 Result := Result * i;
end;


а вот с рекурсией:

Код

function factor2(n: integer): Int64;
begin
if(n < 2)
 then Result := 1
 else Result := n * factor2(n - 1);  
end;


Так второй вариант намного сложнее и дольше выполняем при работе с данной функцией!!


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
sergejzr
Дата 23.2.2005, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Для факториала да, а вот по дереву походи или по графу.
От Сложных алгоритмы часто с помощью рекурсии остаётся пара строк.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
TwisT_X
Дата 24.2.2005, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


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

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



У меня в книжке дано определение рекурсии:
Рекурсивная функция - это функция, которая вызывает сама себя либо непосредственно, либо косвенно с помощью другой функции. В некоторых задачах применение подобных функций обеспечивает компактное и красивое решение. Но для этого сама постановка задачи должна допускать рекурсию.


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
Sardar
Дата 24.2.2005, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



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


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Doc_d0s
Дата 24.2.2005, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



sergej.z
Цитата
нет

да а ты уверен? препишем это так: ret=ret*i, а?

Perchilla
Цитата
Кстати, факториал на самом деле всегда считается без рекурсии, так быстрее.

А как? smile
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
TwisT_X
Дата 24.2.2005, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


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

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



Doc_d0s
Код

function factor1(n: integer): Int64;
var i: integer;
begin
Result := 1;
for i := 2 to n do
Result := Result * i;
end;

Вот как .. smile


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
Бегемот
Дата 24.2.2005, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 26.1.2005
Где: На границе Европы и Азии

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



Doc_d0s
Цитата
препишем это так: ret=ret*i

ret=ret*i и ret*=i это одно и тоже выражение, просто написание разное.
И почему ты вообще решил, что вот это рекурсия?
Цитата
int ret=1;
for(int i=1;i<=n;i++)
{
ret*=i;
}
cout<<ret<<endl;

Рекурсия - это процесс, при котором функция вызывает сама себя.
А тут самый обыкновенный цикл.
PM MAIL   Вверх
sergejzr
Дата 24.2.2005, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Цитата(Doc_d0s @ 24.2.2005, 16:43)
да а ты уверен? препишем это так: ret=ret*i, а?

Слушай, почитай пожалуйста доку по рекурсии, а то так до следующего года спорить будешь smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Doc_d0s
Дата 25.2.2005, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Perchilla
Цитата
Кстати, факториал на самом деле всегда считается без рекурсии, так быстрее.

А как? smile
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
dm9
Дата 25.2.2005, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

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



Цитата(Doc_d0s @ 25.2.2005, 20:44)
А как?


Тебе привели решение на двух языках уже.

PM MAIL ICQ   Вверх
sergejzr
Дата 25.2.2005, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Doc_d0s

Цитата(sergej @ 24.2.2005, 18:01)
Слушай, почитай пожалуйста доку по рекурсии, а то так до следующего года спорить будешь smile


Код


Result := Result * i; //-> НЕ рекурсия, так как там даже намёка на вызов функции нет.

А
Цитата(rewerew @ 24.2.2005, 17:05)
Рекурсия - это процесс, при котором функция вызывает сама себя.


PS:
Вызов функции имеет место в коде, если там присутствуют круглые скобки "(" и ")"
При рекурсии должен происходить ещё и вызов самой функции собой.
Например:

Код

foo() // здесь foo
{
foo(); // Видишь а здесь в foo вызывается сама foo. Это и есть рекурсия.
}

Хватит разводить флейм!




--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Страницы: (3) Все 1 [2] 3 
Закрытая темаСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Интересные и занимательные задачи по программированию | Следующая тема »


 




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


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

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