Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разные способы реализации факториала, Собираем различные способы реализации 
:(
    Опции темы
avnemchenko
Дата 10.7.2009, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день!

Какие есть различные технологии реализации расчета факториала в С++? Ну и сравнение скоростей... Подчеркиваю - именно ТЕХНОЛОГИИ, а не способы (скажем, использование цикла - это технология, а вот цикл for (..), while(..){} или do{..}while(..) - это способы). Мне пришли в голову 3 технологии:

Циклы:

Это очевидно и первое приходит в голову (в мою голову  smile ).

Код

long f (char val)
{
    long res;
    int f;

    if (val < 2)
        return 1;

    res = 1;
    for (f = 2; f <= val; ++f)
        res *= f;

    return res;

}

// ...

long res = f (5);


Рекурсивные функции

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

Код

long f (char val)
{
    if (val < 2)
        return 1;

    return val * f (val - 1);
}

// ...

long res = f (5);


Шаблоны (расчет при компиляции)

Достоинство и недостаток - результат возвращается при компиляции. Скорость, естественно, максимально возможно высокая. Но передавать можно только константу.

Код

template <int Val>
struct f
{
    enum { res = (Val) * f<(Val)-1>::res };
};
template <>
struct f <1>
{
    enum { res = 1 };
};

// ...

long res = f<5>::res;


Можно ли использовать подставляемые функции inline или функции #define? Inline у меня в Visual C++ 8 все равно обычная функция - значит, речь идет о рекурсивной функции. С #define ничего не вышло - компилятор не захотел раскрыть рекурсию и реализовать расчет по образу шаблона.

Интересно бы услышать еще какие-нибудь другие технологии на С++ без ассемблера!
PM ICQ   Вверх
zim22
Дата 10.7.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(avnemchenko @  10.7.2009,  12:09 Найти цитируемый пост)
акие есть различные технологии реализации расчета факториала в С++

развлекайтесь
тыц

Это сообщение отредактировал(а) zim22 - 10.7.2009, 12:26


--------------------
PM MAIL   Вверх
avnemchenko
Дата 10.7.2009, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Интересно! Но что-то у меня там не открываются ссылки...
Но это и не важно - я говорю не об алгоритмах, а о ТЕХНОЛОГИЯХ. Я использовал три - циклы, рекурсия и шаблоны. Можно ли сюда чего добавить?
PM ICQ   Вверх
azesmcar
Дата 10.7.2009, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



PM   Вверх
avnemchenko
Дата 10.7.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(azesmcar @ 10.7.2009,  12:25)
http://forum.vingrad.ru/forum/topic-262993.html

Ой! Я эту тему поиском почему-то не нашел ... Спасибо!
PM ICQ   Вверх
Lazin
Дата 10.7.2009, 12:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(avnemchenko @  10.7.2009,  12:24 Найти цитируемый пост)
ТЕХНОЛОГИЯХ

это 3 реализации одного и того-же алгоритма
PM MAIL Skype GTalk   Вверх
Леопольд
Дата 10.7.2009, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Теперь, видимо, надо будет "собрать разные способы реализации" теоремы Пифагора smile


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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