Чем рекурсия лучше цикла?

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Чем рекурсия лучше цикла?

Сообщение Vitaly1 » 21.06.2004 (Пн) 18:38

Я идиот! Убейте меня, кто-нибудь!

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 21.06.2004 (Пн) 20:17

Лучше то, что позволяет реализовывать заданный алгоритм. Если можно сделать рекурсию, я это делаю, не задумываясь.

moderator
Модератор
Модератор
 
Сообщения: 1896
Зарегистрирован: 10.12.2001 (Пн) 18:11
Откуда: Украина, Харьков

Сообщение moderator » 21.06.2004 (Пн) 20:18

Vitaly1 писал(а):Я идиот! Убейте меня, кто-нибудь!
Что лучше, вилка или нож?
Модератор
http://www.vbstreets.ru / moderator@vbstreets.ru

... Почетные награды: [*], [+], [!]. Все еще впереди...

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 21.06.2004 (Пн) 21:02

moderator писал(а):
Vitaly1 писал(а):Я идиот! Убейте меня, кто-нибудь!
Что лучше, вилка или нож?

Полностью согласен. Сравнивать можно, можно даже поискать чем отличается, но это не нужнее чем сравнивать вилку и нож. Хотя думаю любой цикл можно сделать рекурсией :wink: а наоборот фиг. Но нужно ли?

PS ИМХО нож круче :D

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 24.06.2004 (Чт) 12:00

Moderator писал(а):Vitaly1 писал(а):
Я идиот! Убейте меня, кто-нибудь!
Что лучше, вилка или нож?

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

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 24.06.2004 (Чт) 13:10

пример рекурсии нужен???
факториал числа например удобней бычислять рекурсией
или например ханойские башни без рекурсии трудно решаемая задача
зы обычно считается что рекурсия занимает больше места в памяти но выполняется быстрей (если конечно грамотно написана) ну а с циклами все наоборот...
ззы yandex
Ничто так не ограничивает полёт мысли программиста, как компилятор

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 24.06.2004 (Чт) 17:13

Corgi писал(а):пример рекурсии нужен???
факториал числа например удобней бычислять рекурсией

Пример той рекурсии нужен, когда без нее обойтись нельзя, а факториал прекрасно циклом решается:

Код: Выделить всё
function fact(byval n as byte) as double
fact=1
while n>=2
fact=fact*n
wend
end function


function fact(byval n as byte) as double
if n<=1 then
fact=1
else
fact=n*fact(n-1)
end if
end function

и я не знаю чем лучше тут рекурсия

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 24.06.2004 (Чт) 19:59

Vitaly1 Валяйте, пишите мне программу которая циклом найдет все возможные варианты строк получаемых из символов данной строки. Короче берем сторку и из её символов собрать все возможные строки. Сделай это циклом без рекурсии. Не сможешь т.к. не знаешь сколько будет символов в исходной строке. А циклов придется написать в проге столько сколько символов в строке. Или если гнать одним циклом то не найдешь куда текущие данные складывать. Когда напишешь выкладывай.

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 25.06.2004 (Пт) 0:39

Vitaly1 писал(а):Пример той рекурсии нужен, когда без нее обойтись нельзя, а факториал прекрасно циклом решается

я же написал ханойские башни...
еще можно привести пример - поиск выхода из лабиринта (поиск в ширину)
Ничто так не ограничивает полёт мысли программиста, как компилятор

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 25.06.2004 (Пт) 2:06

corgi писал(а):
Vitaly1 писал(а):Пример той рекурсии нужен, когда без нее обойтись нельзя, а факториал прекрасно циклом решается

я же написал ханойские башни...
еще можно привести пример - поиск выхода из лабиринта (поиск в ширину)

Ты написал решение ханойских башен без рекурсии и с любым числом колец?

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 25.06.2004 (Пт) 10:29

да я вобщем то имел ввиду что решение этой задачи без рекурсии мягко говоря весьма проблематично :roll:
Ничто так не ограничивает полёт мысли программиста, как компилятор

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 25.06.2004 (Пт) 17:06

Любую рекурсивную задачу решаем так: каждую динамическую переменную задаем как динамический массив. В начале приращение статического индекса на один и REDIM PRESERVE на все массивы. К переменным обращаемся не как "X", а "X(i)", где i - тот самый индекс. В конце - уменьшение индекса. Если заранее известна глубина, лучше сделать статичные массивы - быстрее.
Еще вариант - все переменные - поля пользовательского типа переменной, REDIM толькодля нее.
Но рекурсия, конечно, гораздо удобнее. Типичная задача - распознавание математических выражений, раскрытие скобок.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 25.06.2004 (Пт) 20:33

Ты только еще учти, что в циклах FOR...NEXT нельзя использовать элементы массивов, только обычные переменные.
Lasciate ogni speranza, voi ch'entrate.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 26.06.2004 (Сб) 10:18

Согласен, неувязочка :roll:
Видимо циклы придется представлять, как DO...LOOP.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 26.06.2004 (Сб) 14:45

Gagarin писал(а):Vitaly1 Валяйте, пишите мне программу которая циклом найдет все возможные варианты строк получаемых из символов данной строки. Короче берем сторку и из её символов собрать все возможные строки. Сделай это циклом без рекурсии. Не сможешь т.к. не знаеш

Не хочется тратить время на написания совсем не нужного мне алгоритма. Дайте пример решения рекурсивным способом этой задачи, а я переделаю, или скажу, что иначе нельзя

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 27.06.2004 (Вс) 9:55

Я его правда где-то сдесь уже кидал вроде.
Вложения
Perebor.rar
(7.47 Кб) Скачиваний: 57


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 130

    TopList  
cron