- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
double fact(int value)
{
switch (value)
{
case 0:
return 1;
break;
case 1:
return 1;
break;
default:
return value * fact(value - 1);
break;
}
}
abatishchev 04.04.2012 10:26 # −11
Steve_Brown 04.04.2012 10:49 # +3
abatishchev 04.04.2012 10:51 # −9
Конечно, case 0 и case 1 можно было бы объедениться в единый блок.
В остальном всё верно.
roman-kashitsyn 04.04.2012 10:59 # +6
отлично сочетается с рекурсивным вычислением факториала
гамма функция рулит
lucidfoxGovno 04.04.2012 11:24 # 0
roman-kashitsyn 04.04.2012 11:26 # 0
lucidfoxGovno 04.04.2012 11:34 # 0
roman-kashitsyn 04.04.2012 11:54 # +4
http://www.boost.org/doc/libs/1_41_0/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_gamma/tgamma.html
defecate-plusplus 04.04.2012 12:03 # +2
http://bit.ly/HTmdFi
TarasB 04.04.2012 14:45 # +2
roman-kashitsyn 04.04.2012 14:56 # 0
defecate-plusplus 04.04.2012 15:28 # 0
TarasB 04.04.2012 15:35 # 0
defecate-plusplus 04.04.2012 15:52 # 0
жду реализации заполнения массивов компайл-тайм на Аде и факториала до 100 члена в частности
TarasB 04.04.2012 16:06 # 0
lucidfoxGovno 04.04.2012 19:48 # 0
Delphi 7 Proffesional Peerat Edition?
TarasB 04.04.2012 20:10 # 0
Говногость 04.04.2012 22:07 # −2
Govno.NET
juggler00 04.04.2012 11:01 # +4
TarasB 04.04.2012 14:43 # +3
guest 14.09.2012 19:34 # 0
3.14159265 04.04.2012 14:06 # +11
Не используется LINQ.
abatishchev 05.04.2012 12:37 # −5
TarasB 05.04.2012 13:26 # 0
3.14159265 05.04.2012 19:05 # +4
Просто поциенты считают, что Linq - панацея от всего. В том числе от отсутствия головного мозга.
И пихают оный где нужно и где не нужно.
Циклы, например - не нужны. Есть where и лямбды.
Треды не нужны - есть asParallel. Алгоритмы - не нужны, есть Linq. Мозг не нужен - пусть за меня думает Microsoft.
>ЛИНКВ удобная тема.
Правильно. А факториалы нужно считать рекурсивно через switch.
Ведь умный конпелятор сам сделает из кейсов конфетку.
lucidfoxGovno 05.04.2012 20:02 # +2
TarasB 05.04.2012 21:08 # +3
3.14159265 06.04.2012 19:08 # 0
То есть паттерн Стратегия с динамическим связыванием и вызовом разных функций с идентичными сигнатурами, однозначно красивей, чем императивный оператор switch?
А функция-предикат однозначно красивей, чем императивный if?
>Мне нравится стиль ЛИНКВА.
И сахар в виде extension-методов тебе тоже нравится, когда вызывается как бы метод объекта, а на самом деле это какой-то левый статический метод.
Это тоже красиво?!
TarasB 07.04.2012 10:43 # 0
3.14159265 09.04.2012 13:57 # +3
http://www.gamedev.ru/flame/forum/?id=147021&page=7
Или надо написать тривиальный case (оператор множественного выбора).
Нормальный человек пишет case.
Поциент, больной оопиозом головного мозга, напишет по одному классу на каждую ветку этого case, а сам case заменит на вызов виртуального метода.
Для каждого case - свой набор классов.
Кол-во классов у такого поциента может быть астрономическим, код сам по себе пухнет из-за тормозных абстракций на ровном месте.
TarasB 09.04.2012 21:23 # 0
Для полноты слива мне осталось только добавить "я всё это учудил для того, чтобы потроллить".
На самом деле я сторонник KISS. Но .where и .foreach таки красивее чем цикл.
А .AsParallel ВАЩЕ ОХУЕННО!!!
3.14159265 11.04.2012 12:12 # 0
lucidfoxGovno 11.04.2012 13:32 # +5
еще недавно был настоящим байтоебом
TarasB 11.04.2012 13:33 # 0
roman-kashitsyn 05.04.2012 21:23 # +5
В 90% кода приложений, с которыми я работаю, разница в производительности цикла и функции высшего порядка не имеет значения (вызов веб-сервиса порой занимает пару секунд, какой смысл экономить на спичках?), и я скорее отдам предпочтение функциям высшего порядка.
Функции высшего порядка не отменяют необходимости анализа алгоритмов, и уж сложности они точно не прибавляют (немного меняют константы, но не порядок).
Преподносить LINQ как какую-то уникальную технологию - смешно, ведь все идеи, лежащие в его основе, известны уже десятки лет (всё это довольно детально описано в SICP). Но и ничего плохого в нём я не вижу.
3.14159265 06.04.2012 18:53 # 0
Именно.
>и я скорее отдам предпочтение функциям высшего порядка.
Но это совсем не повод совать функциональщину где попало. Даже в тех местах где обычный цикл короче и эффективней.
И не нужно забывать про оверхед (в жабе вовсе чудовищен, но и в более продвинутом шарпе его хватает), когда для написания кастомной логики нужно создавать дополнительные объекты типа делегатов, extension-методов и других вспомогательных сущностей.
roman-kashitsyn 06.04.2012 21:56 # 0
3.14159265 09.04.2012 13:50 # +1
Тут, безусловно, такой подход легитимен. Собственно для увеличения энтропии кода он и создан.
Но и злоупотреблять не стоит, ибо функциональный код иногда читается хуже, чем императивный.
roman-kashitsyn 09.04.2012 14:08 # +1
С этим я и не спорю. Хотя компактность, как правило, повышается. Здесь, как обычно, на помощь приходит чувство меры.
Говногость 09.04.2012 15:28 # 0
roman-kashitsyn 09.04.2012 16:08 # +2
3.14159265 09.04.2012 16:41 # +1
И про меру тоже правильно сказано.
Короче, новомодная функциональщина как и когда-то ооп, полезны не всегда.
Как я уже говорил выше: считать linq серебрянной пулей - нельзя.
Да и вообще зря они в изначально сбалансированный структурно ооп-шный язык вносят спорные улучшения.
Как по мне, то шарп теряет свою стройность, которая была в версии 2.0 и потихоньку превращается в эзотерику подобную С++, где напихано всего и помногу.
Адептам пейсать всё на linq порекомендовал бы пересесть на какой-то функциональный язычок, где императивно кодить попросту нельзя.
roman-kashitsyn 09.04.2012 16:47 # +1
3.14159265 09.04.2012 16:59 # +1
Но мне больше по нраву православный Nemerle.
lucidfoxGovno 05.04.2012 23:11 # +4
Говногость 04.04.2012 11:00 # +3
2)Нет проверки аргуентов (уже назвали).
4)Нужно объединить кейсы 1 и 0 (уже назвали).
5)Лучшеб не выпендривался и написал не рекурсивный алгоритм.
6)Добавил бы мемоизацию аля массив.
govnomonad 04.04.2012 12:03 # +2
TarasB 04.04.2012 14:43 # +1
Говногость 04.04.2012 15:31 # +1
Lure Of Chaos 06.04.2012 08:03 # 0
guest8 09.04.2019 13:01 # −999