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

Поиск:

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


Бывалый
*


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

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



Написать программу для вычисления числа всевозможных перестановок, !!!без использования рекурсии!!! smile smile
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
Fedor
Дата 22.2.2005, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


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

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



а разве это не n! будет?


--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
TwisT_X
Дата 22.2.2005, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


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

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



Цитата
всевозможных перестановок

Как это понять расшифруй плиз..


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


Бывалый
*


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

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



Цитата
а разве это не n! будет?

Ага а как ты вычислишь факториал без рекурсии ? smile
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
sergejzr
Дата 22.2.2005, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


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

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



Разве этот не факториал?
Код

int ret=1;
for(int i=1;i<=n;i++)
{
ret*=i;
}
cout<<ret<<endl;



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


Бывалый
*


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

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



ИМХО вот так:
Код

 int ret = 1;
 for(int i=1; i<=n; i++)
   ret *= i;
 cout<< ret <<endl;


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


Un salsero
Group Icon


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

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



rewerew

Si, exacto ! smile
Сказывается рука набитая на циклах через массивы smile


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


Бывалый
*


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

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



Цитата
ret *= i;

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


Un salsero
Group Icon


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

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



Doc_d0s нет smile


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


Эксперт
****


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

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



Кстати, факториал на самом деле всегда считается без рекурсии, так быстрее.
PM MAIL   Вверх
TwisT_X
Дата 22.2.2005, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


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

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



Факториал может считаться и с рекурсией :
Код

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

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


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


Инженер
****


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

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



А можно еще и итеративной рекурсией... smile


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

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


Un salsero
Group Icon


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

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



cardinal а можно сложением smile


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


Инженер
****


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

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



А можно... а можно вычитанием (отрицательных чисел) или делением (на дроби)...
smile


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

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


Шустрый
*


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

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



Все, что можно сделать рекурсией, можно сделать итеративно. Просто иногда есть задачи, которые рекурсивно решаются легко, а итеративно надо ломать бошку...
PM MAIL   Вверх
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   Вверх
Coocky
Дата 25.2.2005, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

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



Добавлю еще от себя.
Меня учили,что рекурсия был обнаружена случайно,и применение ей мало,так как поглощает много ресурсов.Рекурсия проще,и применяется при вычеслении(выполнении) малых и несложных алгоритмов.


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
cardinal
Дата 25.2.2005, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

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



Doc_d0s, открой книжку и прочитай еще раз что такое рекурсия!


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

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


Бывалый
*


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

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



Люди я ни кого не хочу обижать, раз.
Как я уже говорил ТАК я бы и сам сделал, два.
три, ну скажите иной способ нахождения факториала, кроме как умножением
smile smile smile smile smile smile smile smile smile smile
з.ы. Мир? smile
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
cardinal
Дата 26.2.2005, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

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



Цитата(Doc_d0s @ 26.2.2005, 15:32)
ну скажите иной способ нахождения факториала, кроме как умножением

Да нет такого способа. Есть вариант как посчитать примерно факториал больших чисел (формула Стирлинга), а больше ничего нет. Я не думаю, что заменив все операции умножения на сложения это все можно назвать "без умножения". Умножения как бы нет, но как бы оно есть smile.
Можно посчитать нерекурсивно, можно рекурсивно, а можно итеративно рекурсивно, можно заменить все умножения сложением, можно сделать одну хитрость и посчитать факториал 12 например не десятью умножениями, а пятью умножениями и пятью сложениями... smile


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

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


Ajaxy
****


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

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



тема закрыта smile


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


 




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


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

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