Re[2]: Факториал
От: Igor Sukhov  
Дата: 27.11.07 04:30
Оценка: +2 -1
Здравствуйте, nikov, Вы писали:

N>Я бы был осторожен с такими предположениями. Стив МакКоннелл, например, пишет что он уволил бы сотрудника, который бы стал вычислять факториал с помощью рекурсии.


Если Стив действительно такое написал — то помоему он идиот. Или просто позвиздеть любит (т.е. не уволил бы даже еслибы бы кто-то из его работников стал вычислять ф-л рекурсией).
* thriving in a production environment *
Re[3]: Факториал
От: AntZ  
Дата: 28.11.07 15:57
Оценка: 1 (1) +1
Здравствуйте, NotImplemented, Вы писали:

NI>Здравствуйте, Sergey, Вы писали:

S>>Дано: enum { N = x }; x — целочисленный литерал. Требуется объявить массив целых чисел размера N! Язык решения — C++.
NI>
NI>template<int N>
NI>struct factorial
NI>{
NI>    static const int value = N*factorial<N-1>::value;
NI>};

NI>template<>
NI>struct factorial<0>
NI>{
NI>    static const int value = 1;
NI>};

NI>int main()
NI>{
NI>    int array[factorial<6>::value];
NI>}
NI>


Ну надо-же написать такую х...ень когда можно

const int factorialTable[ ] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320,
        362880, 3628800, 39916800, 479001600};

int main()
{
   int array[ factorialTable[6] ];
}


Во первых, размер массивов в стеке многими компиляторами вычисляется в run-time и нет необходимости использовать константу, размер массива обязательно должен быть известен только для global/static/const массивов, которые располагаются в секциях типа bss/cinit.

Во вторых, Вы продемонстирировали виртуозное владение шаблонами, но это выльется в тупое { N=6*5*4*3*2*1; }, только компилер может одуреть реккурсивной инстанциации шаблона. Если 6 известно на этапе компиляции, то можно сразу подставить константу 720.

Очень многие программеры любят демонстирировать технику владения языком в ущерб простоте и понятности. Я видел код гениальный по навороченности, причем настолько гениальный, что сам автор не понимал как он работает. Товарища уволили.
Re: Факториал
От: nikov США http://www.linkedin.com/in/nikov
Дата: 26.11.07 18:53
Оценка: +1
Здравствуйте, kaselli, Вы писали:

K>Хотя, по видимому, ожидают именно такое решение.


Я бы был осторожен с такими предположениями. Стив МакКоннелл, например, пишет что он уволил бы сотрудника, который бы стал вычислять факториал с помощью рекурсии.

PS. Правильный способ — это, конечно, table lookup
Re: Факториал
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 26.11.07 19:15
Оценка: +1
Здравствуйте, kaselli, Вы писали:

K>Какой смысл забивать стек рекурсивными вызовами, если задача решается элементарным однострочным циклом?

K>Скажите мне плз, в чем кайф?

Кайф получается в языках с tail recursion
-- Андрей
Re[3]: Факториал
От: WolfHound  
Дата: 26.11.07 19:41
Оценка: :)
Здравствуйте, kaselli, Вы писали:

S>>Дано: enum { N = x }; x — целочисленный литерал. Требуется объявить массив целых чисел размера N! Язык решения — C++.

K>А в чем подвох, кроме того, что число может получиться нефигенно большим и система не даст? )
А ты попробуй...
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: Факториал
От: Mika Soukhov Stock#
Дата: 27.11.07 08:59
Оценка: +1
Здравствуйте, Кэр, Вы писали:

Кэр>Да, table lookup — один из лучших вариантов. Все равно около 21! начинаем выходить за пределы ulong.


А смысл тогда из-за этих 21-ой итерации делать оптимизацию? Неужели будет переполнения стека? Насколько я помню код функции факториала, там от силы несколько байт стека.
Re[4]: Факториал
От: Igor Sukhov  
Дата: 29.11.07 01:23
Оценка: +1
Здравствуйте, FractalizeR, Вы писали:

IS>>Если Стив действительно такое написал — то помоему он идиот. Или просто позвиздеть любит (т.е. не уволил бы даже еслибы бы кто-то из его работников стал вычислять ф-л рекурсией).

FR>Прежде, чем называть его идиотом, подумайте, в архитектурной перспективе к чему может привести такой стиль программирования.

какой такой стиль?
что такое "архитектурная перспектива"?
OMFG — написание тривиальной функиции в 10 строк (10 минут на написание и 20 минут на тестирование) как-то влияет на архитектуру в целом? не было такого и не будет.

большинство проблем архитектуры произрастают из двух простых (но от этого не менее печальных) причин:

1. Люди приставленные архитектурить не понимают что и как делать.
2. Люди приставленные присматривать за первыми не видят что первые не понимают что и как делать.

FR>К тому же следует понимать, что такое гипербола в литературе. Если я Вам говорю, что убью всякого, кто наступит мне на мозоль, это не значит, что у меня кортик в заднем кармане брюк и я — хладнокровный убийца.


ну ладно, убедил — идиот это пожалуй не очень точно, точно будет "трепло".
* thriving in a production environment *
Re[7]: Факториал
От: FractalizeR  
Дата: 30.11.07 10:32
Оценка: :)
Здравствуйте, Igor Sukhov, Вы писали:

IS>говорить "в общем" я не хочу и поэтому не буду. разве что добавлю — что есть куча достаточно тривиальных задач которые даже я (как человек к-й программирует наверно получше чем 90% здесь присувтвующих) не знаю как решить не-рекусивно.


Вы скромны. Этого у Вас не отнять...
Re[6]: Факториал
От: FR  
Дата: 03.12.07 08:26
Оценка: :)
Здравствуйте, FractalizeR, Вы писали:

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


FR>Тогда, конечно, у Вас есть собственное объяснение тому, что именно имел ввиду Стив Макконнелл говоря эти слова, не так ли? Не поделитесь с нами своими соображениями?


Стив написал отличную книгу, из нее же видно, что у него нет никакого опыта программирования в функциональном стиле, так что, чтобы он не говорил про рекурсию, это будет равноценно рассуждениям закоренелого сишника о вреде виртуальных функций.
Re[10]: Факториал
От: Igor Sukhov  
Дата: 03.12.07 23:31
Оценка: :)
Здравствуйте, FractalizeR, Вы писали:

IS>>Ни фига не понял что ты написал.

FR>Сочувствую.
Да все нормально, я думаю со времением научишься писать понятно и люди начнут обращать внимание на написанное тобою.
* thriving in a production environment *
Факториал
От: kaselli  
Дата: 26.11.07 18:40
Оценка:
Драсьте всем!
Вошел тут малость в ступор....
Есть такая общеизвестная задачка — решение факториала. Вроде как любят ее задавать на собеседованиях.
Решение можно привести в виде цикла, можно в виде рекурсии.
Причем, имхо, последний вариант — тот еще изврат. Хотя, по видимому, ожидают именно такое решение.
Какой смысл забивать стек рекурсивными вызовами, если задача решается элементарным однострочным циклом?
Скажите мне плз, в чем кайф?
Re: Факториал
От: bkat  
Дата: 26.11.07 18:45
Оценка:
Здравствуйте, kaselli, Вы писали:

K>Скажите мне плз, в чем кайф?


Посмотреть, понимаешь ли ты рекурсию.
Далеко не все, на самом деле, могут мыслить рекурсивно.
Можно еще попросить написать какой-нибудь алгорим на рекурсивных структурах данных,
типа списки или деревья.

Задачки на собеседовании не всегда имеют прямое отношение к реальным вещам.
Re[2]: Факториал
От: Кэр  
Дата: 26.11.07 19:00
Оценка:
Здравствуйте, nikov, Вы писали:

N>Здравствуйте, kaselli, Вы писали:


K>>Хотя, по видимому, ожидают именно такое решение.


N>Я бы был осторожен с такими предположениями. Стив МакКоннелл, например, пишет что он уволил бы сотрудника, который бы стал вычислять факториал с помощью рекурсии.


N>PS. Правильный способ — это, конечно, table lookup


Да, table lookup — один из лучших вариантов. Все равно около 21! начинаем выходить за пределы ulong.
Re: Факториал
От: Sergey Россия  
Дата: 26.11.07 19:08
Оценка:
Здравствуйте, kaselli, Вы писали:

K>Драсьте всем!

K>Вошел тут малость в ступор....
K>Есть такая общеизвестная задачка — решение факториала. Вроде как любят ее задавать на собеседованиях.
K>Решение можно привести в виде цикла, можно в виде рекурсии.
K>Причем, имхо, последний вариант — тот еще изврат. Хотя, по видимому, ожидают именно такое решение.
K>Какой смысл забивать стек рекурсивными вызовами, если задача решается элементарным однострочным циклом?
K>Скажите мне плз, в чем кайф?

Ну я эту загадку пару раз формулировал на собеседовании так:
Дано: enum { N = x }; x — целочисленный литерал. Требуется объявить массив целых чисел размера N! Язык решения — C++.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[2]: Факториал
От: kaselli  
Дата: 26.11.07 19:24
Оценка:
Здравствуйте, nikov, Вы писали:

N>PS. Правильный способ — это, конечно, table lookup


А можно поподробнее? )
Не совсем понимаю, чем хэшированная таблица может помочь вычислению факториала и предотвратить выход за пределы числа
Re: Факториал
От: Olegator  
Дата: 26.11.07 19:28
Оценка:
Здравствуйте, kaselli, Вы писали:

K>Причем, имхо, последний вариант — тот еще изврат. Хотя, по видимому, ожидают именно такое решение.

K>Какой смысл забивать стек рекурсивными вызовами, если задача решается элементарным однострочным циклом?
K>Скажите мне плз, в чем кайф?

Возможно, что ожидалась рекурсия с запоминанием вычисленных значений (динамическое программирование).
Это решение включает преимущества как итеративного подхода (не надо ничего хардкодить), так и табличного подхода (эффективность).
Re[2]: Факториал
От: kaselli  
Дата: 26.11.07 19:28
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Ну я эту загадку пару раз формулировал на собеседовании так:

S>Дано: enum { N = x }; x — целочисленный литерал. Требуется объявить массив целых чисел размера N! Язык решения — C++.

А в чем подвох, кроме того, что число может получиться нефигенно большим и система не даст? )
Re[3]: Факториал
От: Sashaka Россия  
Дата: 26.11.07 19:32
Оценка:
Здравствуйте, kaselli, Вы писали:

K>Здравствуйте, Sergey, Вы писали:


S>>Ну я эту загадку пару раз формулировал на собеседовании так:

S>>Дано: enum { N = x }; x — целочисленный литерал. Требуется объявить массив целых чисел размера N! Язык решения — C++.

K>А в чем подвох, кроме того, что число может получиться нефигенно большим и система не даст? )


видимо в вычислении факториала на этапе компиляции с пом. шаблончегов
Re[2]: Факториал
От: WolfHound  
Дата: 26.11.07 19:41
Оценка:
Здравствуйте, Андрей Коростелев, Вы писали:

АК>Кайф получается в языках с tail recursion

Те во всех языках где компилятор умеет оптимизировать.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: Факториал
От: bkat  
Дата: 26.11.07 19:46
Оценка:
Здравствуйте, kaselli, Вы писали:

K>А можно поподробнее? )

K>Не совсем понимаю, чем хэшированная таблица может помочь вычислению факториала и предотвратить выход за пределы числа

Все просто. Например вот так:

int fact( int x )
{
  static const int table[] = {1, 1, 2, 6, 24, 120, 720,
                              5040, 40320, 362880, 3628800,
                              39916800, 479001600 };
  static const int tableSize = sizeof(table)/sizeof(int);

  if ( x>=0 && x<tableSize )
  {
      return table[x];
  }
  throw std::out_of_range( "fact:invalid argument" );
}


P.S. Надеюсь факториалы верно вписал
Re[4]: Факториал
От: kaselli  
Дата: 26.11.07 21:13
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>А ты попробуй...


попробовал...

enum 
{
    N = 4
};

long fac (long l)
{
    assert (l >= 0);
    long ret = 1;

    if (l > 0)
    {
        for (long i = 1; i <= l; i++)
        {
            ret *= i;
        }
    }

    return ret;
}

int main (int argc, _TCHAR* argv[])
{
    int * arr = new int [fac (N)];
    delete [] arr;

    return 0;
}


и?
Re[5]: Факториал
От: Sergey Россия  
Дата: 26.11.07 21:35
Оценка:
Здравствуйте, kaselli, Вы писали:

K>Здравствуйте, WolfHound, Вы писали:


WH>>А ты попробуй...


K>попробовал...


K>
K>enum 
K>{
K>    N = 4
K>};

K>long fac (long l)
K>{
K>    assert (l >= 0);
K>    long ret = 1;

K>    if (l > 0)
K>    {
K>        for (long i = 1; i <= l; i++)
K>        {
K>            ret *= i;
K>        }
K>    }

K>    return ret;
K>}

K>int main (int argc, _TCHAR* argv[])
K>{
K>    int * arr = new int [fac (N)];
K>    delete [] arr;

K>    return 0;
K>}


K>


K>и?


И в котором месте тут объявлен массив? Я вижу только указатель на int. А надо int arr[x];, где x такое, что sizeof(arr)/sizeof(arr[0]) = N!.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[6]: Факториал
От: kaselli  
Дата: 26.11.07 22:06
Оценка:
Здравствуйте, Sergey, Вы писали:

S>И в котором месте тут объявлен массив? Я вижу только указатель на int. А надо int arr[x];, где x такое, что sizeof(arr)/sizeof(arr[0]) = N!.


О, вот в этом и есть подвох )
Ну, первое, что приходит в голову — умный макрос. Вспоминая, что вы говорили о С++ — макрос не подходит. Но далее идет мысль о умном шаблоне.
Пару минут побился с шаблонами, ничего не вышло (( Сложно сейчас совсем мыслить....


Кстати, а такой ответ прошел бы:

// здесь все то же...
...
int arr [fac (N)];


?
gcc с некоторыми опциями (не помню, какими) запросто это соберет, создав массив в куче
Re[7]: Факториал
От: mc-Duck  
Дата: 27.11.07 04:09
Оценка:
Здравствуйте, kaselli, Вы писали:

K>Пару минут побился с шаблонами, ничего не вышло (( Сложно сейчас совсем мыслить....


да это же задача для второкурсников

K>Кстати, а такой ответ прошел бы:


K>
K>// здесь все то же...
K>...
K>int arr [fac (N)];
K>


K>?


нет конечно, мы же по стандарту пишем, а не под компилятор

K>gcc с некоторыми опциями (не помню, какими) запросто это соберет, создав массив в куче


массив — он на стеке, в куче — это уже кусок памяти (в крайнем случае — динамический массив).
Re[2]: Факториал
От: NotImplemented США github.com/NotImplemented
Дата: 27.11.07 10:57
Оценка:
Здравствуйте, Sergey, Вы писали:
S>Дано: enum { N = x }; x — целочисленный литерал. Требуется объявить массив целых чисел размера N! Язык решения — C++.
template<int N>
struct factorial
{
    static const int value = N*factorial<N-1>::value;
};

template<>
struct factorial<0>
{
    static const int value = 1;
};

int main()
{
    int array[factorial<6>::value];
}
Re: Факториал
От: shrecher  
Дата: 27.11.07 11:34
Оценка:
вроде бы факториал можно вычислить в compile-time

http://en.wikibooks.org/wiki/C++_Programming/Template/Template_Meta-Programming
Re[2]: Факториал
От: BulatZiganshin  
Дата: 27.11.07 13:35
Оценка:
Здравствуйте, Андрей Коростелев, Вы писали:

АК>Кайф получается в языках с tail recursion


не получится, поскольку формула n*f(n-1) не tail-рекурсивна
Люди, я люблю вас! Будьте бдительны!!!
Re[3]: Факториал
От: BulatZiganshin  
Дата: 27.11.07 13:38
Оценка:
всё-таки по степени изврата c++ до хаскела не дотягивает

http://www.willamette.edu/~fruehr/haskell/evolution.html
Люди, я люблю вас! Будьте бдительны!!!
Re[3]: Факториал
От: R.K. Украина  
Дата: 27.11.07 20:16
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>Здравствуйте, Андрей Коростелев, Вы писали:


АК>>Кайф получается в языках с tail recursion


BZ>не получится, поскольку формула n*f(n-1) не tail-рекурсивна


А что мешает сделать так?
inline unsigned factorial(unsigned n, unsigned a = 1)
{ return n ? factorial(n - 1, a * n) : a; }
You aren't expected to absorb this
Re[4]: Факториал
От: BulatZiganshin  
Дата: 27.11.07 23:36
Оценка:
Здравствуйте, R.K., Вы писали:

RK>Здравствуйте, BulatZiganshin, Вы писали:


BZ>>Здравствуйте, Андрей Коростелев, Вы писали:


АК>>>Кайф получается в языках с tail recursion


BZ>>не получится, поскольку формула n*f(n-1) не tail-рекурсивна


RK>А что мешает сделать так?

RK>
inline unsigned factorial(unsigned n, unsigned a = 1)
RK>{ return n ? factorial(n - 1, a * n) : a; }


это работает. однако я бы не сказал, что это понятней императивного

a=1
for i in 1..n
a=a*i

вот не tail-recursive вариант — он ясней императивного:
fac 0 = 1
fac n = n * fac(n-1)
Люди, я люблю вас! Будьте бдительны!!!
Re[4]: Факториал
От: Thanatos Украина  
Дата: 28.11.07 10:49
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>всё-таки по степени изврата c++ до хаскела не дотягивает


BZ>http://www.willamette.edu/~fruehr/haskell/evolution.html





Вопрос, конечно, риторический... но — КАК ВСЁ ЭТО РАБОТАЕТ???
Лучший дар, который мы получили от природы и который лишает нас всякого права жаловаться – это возможность сбежать. /М.Монтень/
Re[3]: Факториал
От: FractalizeR  
Дата: 28.11.07 11:56
Оценка:
Здравствуйте, Igor Sukhov, Вы писали:

IS>Здравствуйте, nikov, Вы писали:


N>>Я бы был осторожен с такими предположениями. Стив МакКоннелл, например, пишет что он уволил бы сотрудника, который бы стал вычислять факториал с помощью рекурсии.


IS>Если Стив действительно такое написал — то помоему он идиот. Или просто позвиздеть любит (т.е. не уволил бы даже еслибы бы кто-то из его работников стал вычислять ф-л рекурсией).

Прежде, чем называть его идиотом, подумайте, в архитектурной перспективе к чему может привести такой стиль программирования. К тому же следует понимать, что такое гипербола в литературе. Если я Вам говорю, что убью всякого, кто наступит мне на мозоль, это не значит, что у меня кортик в заднем кармане брюк и я — хладнокровный убийца.
Re[4]: Факториал
От: Ватакуси Россия  
Дата: 28.11.07 14:23
Оценка:
Здравствуйте, bkat, Вы писали:

B>Здравствуйте, kaselli, Вы писали:


K>>А можно поподробнее? )

K>>Не совсем понимаю, чем хэшированная таблица может помочь вычислению факториала и предотвратить выход за пределы числа

B>Все просто. Например вот так:


А если мне нужен факториал 100, 1000, 100000 и я работаю с длинными числами?
Все будет Украина!
Re[5]: Факториал
От: BulatZiganshin  
Дата: 28.11.07 16:32
Оценка:
Здравствуйте, Thanatos, Вы писали:

BZ>>http://www.willamette.edu/~fruehr/haskell/evolution.html


T>Вопрос, конечно, риторический... но — КАК ВСЁ ЭТО РАБОТАЕТ???


а я знаю?? я и в школе-то всего 8 лет проучился..
Люди, я люблю вас! Будьте бдительны!!!
Re[5]: Факториал
От: bkat  
Дата: 28.11.07 16:47
Оценка:
Здравствуйте, Ватакуси, Вы писали:

В>А если мне нужен факториал 100, 1000, 100000 и я работаю с длинными числами?


Ну это твои проблемы
Используй тогда, например, гамма-функцию

А зачем тебе факториал от 100000?
Re[4]: Факториал
От: Кэр  
Дата: 29.11.07 05:30
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>А смысл тогда из-за этих 21-ой итерации делать оптимизацию? Неужели будет переполнения стека? Насколько я помню код функции факториала, там от силы несколько байт стека.


Смысла нет писать код "вычисляющий" факториал. Код содержащий массив из 21 числа и возращающий число по индексу резко проще написать и проверить.
Re[5]: Факториал
От: freelancer_spb  
Дата: 29.11.07 06:23
Оценка:
Здравствуйте, Igor Sukhov, Вы писали:


IS>какой такой стиль?

IS>что такое "архитектурная перспектива"?
IS>OMFG — написание тривиальной функиции в 10 строк (10 минут на написание и 20 минут на тестирование) как-то влияет на архитектуру в целом? не было такого и не будет.

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



IS>большинство проблем архитектуры произрастают из двух простых (но от этого не менее печальных) причин:


IS>1. Люди приставленные архитектурить не понимают что и как делать.

IS>2. Люди приставленные присматривать за первыми не видят что первые не понимают что и как делать.

Отличные идеи чтобы сваливать проблемы на плечи архитекторов и менеджеров. Почему баги — неправильная архитектура, архитектор некомпетентен. Почему я не успеваю в срок — неправильное планирование, менеджер некомпетентен. Да они вообще в программировании не понимают!
Re[6]: Факториал
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 29.11.07 06:55
Оценка:
Здравствуйте, freelancer_spb, Вы писали:

_>Грубо говоря рекурсия это плохо потому что сложно


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

_>Отличные идеи чтобы сваливать проблемы на плечи архитекторов и менеджеров.


А разве это не так? очень верно было сказано.

_>Почему баги — неправильная архитектура, архитектор некомпетентен.


Баги — нет. Трудно поддерживаемая, глючащая на ровном месте система — да.

_> Почему я не успеваю в срок — неправильное планирование, менеджер некомпетентен.


А кто еще виноват? Видимо фаза луны помещала менеджеру учесть все риски и составить корректный план работ?

_>Да они вообще в программировании не понимают!


В exUSSR 90% менеджеров бывшие программисты.
Re[6]: Факториал
От: Igor Sukhov  
Дата: 29.11.07 08:19
Оценка:
IS>>какой такой стиль?
IS>>что такое "архитектурная перспектива"?
IS>>OMFG — написание тривиальной функиции в 10 строк (10 минут на написание и 20 минут на тестирование) как-то влияет на архитектуру в целом? не было такого и не будет.

_>Грубо говоря рекурсия это плохо потому что сложно, есть алгоритмы в которых с рекурсией становится проще, в остальных случаях если её можно избегать лучше избегать из-за сложности понимания.

_>Не все понимают рекурсию, при развитии кода возможно появление рекурсии в рекурсии, циклической рекурсии и т.п.

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

говорить "в общем" я не хочу и поэтому не буду. разве что добавлю — что есть куча достаточно тривиальных задач которые даже я (как человек к-й программирует наверно получше чем 90% здесь присувтвующих) не знаю как решить не-рекусивно. а как рекурсивно — знаю сходу. т.е. ставя запрет на рекурсию — чего мы добиваемся — чтобы озадаченные разработчики потерли голову час-два-день, потом все-таки пошли к человеку который им бы такую ф-ю нарисовал — и что у них от этого больше понимания стало? не-а.

IS>>большинство проблем архитектуры произрастают из двух простых (но от этого не менее печальных) причин:


IS>>1. Люди приставленные архитектурить не понимают что и как делать.

IS>>2. Люди приставленные присматривать за первыми не видят что первые не понимают что и как делать.

_>Отличные идеи чтобы сваливать проблемы на плечи архитекторов и менеджеров. Почему баги — неправильная архитектура, архитектор некомпетентен. Почему я не успеваю в срок — неправильное планирование, менеджер некомпетентен. Да они вообще в программировании не понимают!


это не идеи — это как я видел и вижу ситуации изнутри.
притом смотрю я одновременно и с позиции разраба и архитекта.
* thriving in a production environment *
Re[5]: Факториал
От: Mika Soukhov Stock#
Дата: 29.11.07 09:31
Оценка:
Здравствуйте, Кэр, Вы писали:

Кэр>Здравствуйте, Mika Soukhov, Вы писали:


MS>>А смысл тогда из-за этих 21-ой итерации делать оптимизацию? Неужели будет переполнения стека? Насколько я помню код функции факториала, там от силы несколько байт стека.


Кэр>Смысла нет писать код "вычисляющий" факториал. Код содержащий массив из 21 числа и возращающий число по индексу резко проще написать и проверить.


Проверять вычисления факториала? Хорошо, люди бывают разные. И если кто-то не уверен (кстати, а не такие ли люди кандидаты номер один на увольнение?), что он сможет написать такой код без ошибок, то всегда есть интернет + CopyPaste.
Re[4]: Факториал
От: NotImplemented США github.com/NotImplemented
Дата: 29.11.07 11:45
Оценка:
Здравствуйте, AntZ, Вы писали:

AZ>Здравствуйте, NotImplemented, Вы писали:

AZ>Ну надо-же написать такую х..

Да не волнуйтесь Вы так.
Re[5]: Факториал
От: FractalizeR  
Дата: 29.11.07 11:58
Оценка:
FR>>Прежде, чем называть его идиотом, подумайте, в архитектурной перспективе к чему может привести такой стиль программирования.

IS>какой такой стиль?

IS>что такое "архитектурная перспектива"?
IS>OMFG — написание тривиальной функиции в 10 строк (10 минут на написание и 20 минут на тестирование) как-то влияет на архитектуру в целом? не было такого и не будет.

Во-первых, незачем нервничать и плеваться злыми аббревиатурами. Во-вторых, если провести аналогию — если в детстве вы некрасиво писали простую букву А, то это совсем никак не повлияет на вашу каллиграфию при написании более сложных текстов, когда вы станете взрослым? Дисциплина и архитектура начинаются с малого. Никто не учится строить здания с проектирования вращающихся небоскребов, не так ли? Если человек одноэтажный дом будет проектировать криво, с ненужными сложностями, его небоскреб рухнет 100%.
Re: Факториал
От: Tilir Россия http://tilir.livejournal.com
Дата: 29.11.07 12:02
Оценка:
Здравствуйте, kaselli, Вы писали:

K>Драсьте всем!

K>Вошел тут малость в ступор....
K>Есть такая общеизвестная задачка — решение факториала. Вроде как любят ее задавать на собеседованиях.
K>Скажите мне плз, в чем кайф?

Есть кайф... Вот как можно вычислить факториал на Haskell. Я люблю этот язык ))

— explicit type recursion with functors and catamorphisms

newtype Mu f = In (f (Mu f))

unIn (In x) = x

cata phi = phi . fmap (cata phi) . unIn

— base functor and data type for natural numbers,
— using locally-defined «eliminators»

data N c = Z | S c

instance Functor N where
  fmap g  Z    = Z
  fmap g (S x) = S (g x)

type Nat = Mu N

zero = In Z
suck n = In (S n)

add m = cata phi where
  phi  Z    = m
  phi (S f) = suck f

mult m = cata phi where
  phi  Z    = zero
  phi (S f) = add m f

— explicit products and their functorial action

data Prod e c = Pair c e

outl (Pair x y) = x
outr (Pair x y) = y

fork f g x = Pair (f x) (g x)

instance Functor (Prod e) where
  fmap g = fork (g . outl) outr

— comonads, the categorical «opposite» of monads

class Functor n => Comonad n where
  extr :: n a -> a
  dupl :: n a -> n (n a)

instance Comonad (Prod e) where
  extr = outl
  dupl = fork id outr


gcata :: (Functor f, Comonad n) =>
           (forall a. f (n a) -> n (f a))
             -> (f (n c) -> c) -> Mu f -> c

gcata dist phi = extr . cata (fmap phi . dist . fmap dupl)

zygo chi = gcata (fork (fmap outl) (chi . fmap outr))

para :: Functor f => (f (Prod (Mu f) c) -> c) -> Mu f -> c
para = zygo In

fac = para phi where
  phi  Z             = suck zero
  phi (S (Pair f n)) = mult f (suck n)

int = cata phi where
  phi  Z    = 0
  phi (S f) = 1 + f

instance Show (Mu N) where
  show = show . int


Взято отсюда: http://absurdopedia.wikia.com/wiki/Haskell
Re[6]: Факториал
От: Igor Sukhov  
Дата: 29.11.07 12:41
Оценка:
IS>>что такое "архитектурная перспектива"?
IS>>OMFG — написание тривиальной функиции в 10 строк (10 минут на написание и 20 минут на тестирование) как-то влияет на архитектуру в целом? не было такого и не будет.

FR>Во-первых, незачем нервничать и плеваться злыми аббревиатурами. Во-вторых, если провести аналогию — если в детстве вы некрасиво писали простую букву А, то это совсем никак не повлияет на вашу каллиграфию при написании более сложных текстов, когда вы станете взрослым? Дисциплина и архитектура начинаются с малого. Никто не учится строить здания с проектирования вращающихся небоскребов, не так ли? Если человек одноэтажный дом будет проектировать криво, с ненужными сложностями, его небоскреб рухнет 100%.


Не хотелось бы отрывать вот важных размышнелий специалиста по вращающимся небоскребам, но разговор шел об рекурсии в тривиальных задачах — конкретно мы рассматривали ф-ю вычисления факториала.
* thriving in a production environment *
Re[2]: Факториал
От: AntZ  
Дата: 29.11.07 12:57
Оценка:
T>Есть кайф... Вот как можно вычислить факториал на Haskell. Я люблю этот язык ))

...

T>Взято отсюда: http://absurdopedia.wikia.com/wiki/Haskell


Круто! Почувствуй себя никчемным программером Я бы так не смог
Re[7]: Факториал
От: FractalizeR  
Дата: 29.11.07 13:00
Оценка:
Здравствуйте, Igor Sukhov, Вы писали:

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


Специалисту по вращающимся небоскребам кажется, что обсуждение в этой конкретной ветке началось с упрека в сторону Стива Макконелла. Стив вовсе не имел ввиду рекурсию в задачах, имеющих чисто академическую ценность. Речь шла о его сотруднике, который стал бы вычислять факториал рекурсей, если бы ему попалась такая задача в работею
Re[6]: Факториал
От: Кэр  
Дата: 30.11.07 09:31
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>Проверять вычисления факториала? Хорошо, люди бывают разные. И если кто-то не уверен (кстати, а не такие ли люди кандидаты номер один на увольнение?), что он сможет написать такой код без ошибок, то всегда есть интернет + CopyPaste.


Конечно проверять. Желательно unit-test'ами. Ошибиться можно на пустом месте. Ровно также как и любой другой неважно какой гуру в интернете — также может ошибиться на пустом месте.

На мой взгляд, возможно непросвященный, программист, который проверке собственного кода предпочитает интернет + CopyPaste, и есть кандидат на увольнение. В особенности те наивные вьюноши, которые занимаются бездумным копипастом из MSDN'a — там порой встречается просто отвратительный код, который потом бодро множится.
Re[7]: Факториал
От: Mika Soukhov Stock#
Дата: 30.11.07 09:47
Оценка:
Здравствуйте, Кэр, Вы писали:

Кэр>Здравствуйте, Mika Soukhov, Вы писали:


MS>>Проверять вычисления факториала? Хорошо, люди бывают разные. И если кто-то не уверен (кстати, а не такие ли люди кандидаты номер один на увольнение?), что он сможет написать такой код без ошибок, то всегда есть интернет + CopyPaste.


Кэр>Конечно проверять. Желательно unit-test'ами. Ошибиться можно на пустом месте. Ровно также как и любой другой неважно какой гуру в интернете — также может ошибиться на пустом месте.


Давай все же не уходить далеко от темы. Тема — факториал. Ты говоришь, что его проверить проще табличным способом. Вот проверка для решения в лоб:

FactorialTest()
{
  Dictionary testValues = { {-1, NaN}, {0, 1}, {1, 1}, .... };
  for (testValue in testValues)
    Assert(Factorial(testValue.Key), testValue.Value);
}


Пока мне, как юнит тест для табличного варианта, чтобы он был проще.

Кэр>На мой взгляд, возможно непросвященный, программист, который проверке собственного кода предпочитает интернет + CopyPaste, и есть кандидат на увольнение. В особенности те наивные вьюноши, которые занимаются бездумным копипастом из MSDN'a — там порой встречается просто отвратительный код, который потом бодро множится.


Мне эта тема (что там происходит с МСДН) не так интересна, как вычисление факториала.
Re[8]: Факториал
От: Кэр  
Дата: 30.11.07 12:02
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>
MS>FactorialTest()
MS>{
MS>  Dictionary testValues = { {-1, NaN}, {0, 1}, {1, 1}, .... };
MS>  for (testValue in testValues)
MS>    Assert(Factorial(testValue.Key), testValue.Value);
MS>}
MS>


MS>Пока мне, как юнит тест для табличного варианта, чтобы он был проще.


Что стоит на месте многоточия? Для int'а там очень немного значений. Ты выпишешь их все? Если да — то получаешь альтернативную реализацию факториала. Зачем тебе их две? Чтобы было проще ошибиться?

MS>Мне эта тема (что там происходит с МСДН) не так интересна, как вычисление факториала.


Мне вся эта тема не особо интересна.
Re[9]: Факториал
От: Mika Soukhov Stock#
Дата: 30.11.07 12:13
Оценка:
Здравствуйте, Кэр, Вы писали:

Кэр>Здравствуйте, Mika Soukhov, Вы писали:


MS>>
MS>>FactorialTest()
MS>>{
MS>>  Dictionary testValues = { {-1, NaN}, {0, 1}, {1, 1}, .... };
MS>>  for (testValue in testValues)
MS>>    Assert(Factorial(testValue.Key), testValue.Value);
MS>>}
MS>>


MS>>Пока мне, как юнит тест для табличного варианта, чтобы он был проще.


Кэр>Что стоит на месте многоточия?


Несколько ключевых значений. Например, штук 10-ти хватит вполне.

Кэр>Для int'а там очень немного значений. Ты выпишешь их все? Если да — то получаешь альтернативную реализацию факториала. Зачем тебе их две? Чтобы было проще ошибиться?


Так покажи как нужно написать код юнит теста для табличного способа. Всегда раз узнать что-то интересное и новое.

MS>>Мне эта тема (что там происходит с МСДН) не так интересна, как вычисление факториала.


Кэр>Мне вся эта тема не особо интересна.


Что ж ты себя насилуешь?
Re[10]: Факториал
От: Кэр  
Дата: 30.11.07 13:08
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

Кэр>>Что стоит на месте многоточия?

MS>Несколько ключевых значений. Например, штук 10-ти хватит вполне.

Их всего 13
Автор: bkat
Дата: 26.11.07
.

MS>Так покажи как нужно написать код юнит теста для табличного способа. Всегда раз узнать что-то интересное и новое.


1. Проверка правильных значений. В данном случае можно проверить все правильные исходы.
2. Проверка неверных значений: -1, 14, -17, NaN, Infinity, NegativeInfinity, 2^32, -2^32.
Дальше уже тесты, которые идут к программистам из QA отдела:
3. Проверка на разных платформах, если это нужно.
4. Стресс-тесты.
5. Проверка одновременных вызовов из нескольких потоков.
6. Проверка в разных локалях.
Остальное уже зависит от конкретных ситуаций

Код, писать не буду — сразу говорю

Кэр>>Мне вся эта тема не особо интересна.

MS>Что ж ты себя насилуешь?
А кто сказал, что я себя насилую? Так, захожу почитать во время долгой компиляции и подъема проекта
Re[11]: Факториал
От: Mika Soukhov Stock#
Дата: 30.11.07 13:16
Оценка:
Здравствуйте, Кэр, Вы писали:

MS>>Так покажи как нужно написать код юнит теста для табличного способа. Всегда раз узнать что-то интересное и новое.


Кэр>1. Проверка правильных значений. В данном случае можно проверить все правильные исходы.

Кэр>2. Проверка неверных значений: -1, 14, -17, NaN, Infinity, NegativeInfinity, 2^32, -2^32.

И получается тот же самый код, что привел я. И, следовательно, никаких преимуществ в тестировании нет

Кэр>Дальше уже тесты, которые идут к программистам из QA отдела:

Кэр>3. Проверка на разных платформах, если это нужно.
Кэр>4. Стресс-тесты.
Кэр>5. Проверка одновременных вызовов из нескольких потоков.
Кэр>6. Проверка в разных локалях.
Кэр>Остальное уже зависит от конкретных ситуаций

Кэр>Код, писать не буду — сразу говорю


Это вы такое для факториала делаете? Или ты просто написал все стадии проверки, какие могут быть в природе?
Re[12]: Факториал
От: Кэр  
Дата: 30.11.07 13:20
Оценка:
Здравствуйте, Mika Soukhov, Вы писали:

MS>И получается тот же самый код, что привел я. И, следовательно, никаких преимуществ в тестировании нет


Перечитай ветку, я про преимущества тестирования не говорил.

MS>Это вы такое для факториала делаете? Или ты просто написал все стадии проверки, какие могут быть в природе?


Мы факториал не пишем. Ты спросил, как стоило бы тестировать метод факториала — я написал как стоило бы.
Re[8]: Факториал
От: Igor Sukhov  
Дата: 01.12.07 07:29
Оценка:
Здравствуйте, FractalizeR, Вы писали:

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


FR>Специалисту по вращающимся небоскребам кажется, что обсуждение в этой конкретной ветке началось с упрека в сторону Стива Макконелла. Стив вовсе не имел ввиду рекурсию в задачах, имеющих чисто академическую ценность. Речь шла о его сотруднике, который стал бы вычислять факториал рекурсей, если бы ему попалась такая задача в работею


Ни фига не понял что ты написал.
* thriving in a production environment *
Re[3]: Факториал
От: FR  
Дата: 01.12.07 08:36
Оценка:
Здравствуйте, NotImplemented, Вы писали:

NI>Здравствуйте, Sergey, Вы писали:

S>>Дано: enum { N = x }; x — целочисленный литерал. Требуется объявить массив целых чисел размера N! Язык решения — C++.
NI>
NI>template<int N>
NI>struct factorial
NI>{
NI>    static const int value = N*factorial<N-1>::value;
NI>};

NI>template<>
NI>struct factorial<0>
NI>{
NI>    static const int value = 1;
NI>};

NI>int main()
NI>{
NI>    int array[factorial<6>::value];
NI>}
NI>


На D лучше :

long fact(long n)
{
    if(n < 2) return 1;
    return n * fact(n - 1);
}
    

void main()
{
    int array[fact(6)];
}
Re[4]: Факториал
От: FR  
Дата: 01.12.07 08:43
Оценка:
Здравствуйте, FractalizeR, Вы писали:

FR>Прежде, чем называть его идиотом, подумайте, в архитектурной перспективе к чему может привести такой стиль программирования. К тому же следует понимать, что такое гипербола в литературе. Если я Вам говорю, что убью всякого, кто наступит мне на мозоль, это не значит, что у меня кортик в заднем кармане брюк и я — хладнокровный убийца.


Вполне может привести к тому что называется функциональной декомпозицей и функциональным программированием, и вполне вероятно что человек холрошо владеющей таким стилем программирования более квалифицирован чем средний программист.
Re[6]: Факториал
От: FR  
Дата: 01.12.07 08:59
Оценка:
Здравствуйте, freelancer_spb, Вы писали:

_>Грубо говоря рекурсия это плохо потому что сложно, есть алгоритмы в которых с рекурсией становится проще, в остальных случаях если её можно избегать лучше избегать из-за сложности понимания.


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

_>Не все понимают рекурсию, при развитии кода возможно появление рекурсии в рекурсии, циклической рекурсии и т.п.


Угу а многие не понимают указателей, куча людей не понимает сути ООП, это тоже все запретить?
Re[7]: Факториал
От: FR  
Дата: 01.12.07 09:00
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Здравствуйте, freelancer_spb, Вы писали:


_>>Грубо говоря рекурсия это плохо потому что сложно


KP>Грубо говоря, не надо забывать о том, что меньше половины разработчиков вообще понимает что такое рекурсия и как следствие усложнение кода ведет к дополнительным затратам при его поддержке. Если проект пишется не одиночкой, то использование навороченных библиотек поведение которых понимают единицы должно быть запрещено, то же относится и к рекурсиям.


Так же не надо забывать что использование рекурсии и ФВП наоборот существенно упрощает и делает более надежным код.
Re[3]: Факториал
От: FR  
Дата: 01.12.07 09:12
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>не получится, поскольку формула n*f(n-1) не tail-рекурсивна


Нормальные C++ компиляторы, если разрешить инлайнить рекурсивные функции, факториал (и фибоначи ) оптимизируют так что стек практически не используется и скорсть приближается к итеративному варианту (правда код конечно раздувают).
Re[4]: Факториал
От: FR  
Дата: 01.12.07 09:13
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>всё-таки по степени изврата c++ до хаскела не дотягивает


BZ>http://www.willamette.edu/~fruehr/haskell/evolution.html


Ну при желании на C++ тоже можно извратится по самое ни хочу, например вплоть до написания compile time интерпретатора лиспа или форта и решения задачи с их помощью
Re[3]: Факториал
От: Андрей Коростелев Голландия http://www.korostelev.net/
Дата: 02.12.07 22:39
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

АК>>Кайф получается в языках с tail recursion

BZ>не получится, поскольку формула n*f(n-1) не tail-рекурсивна

Зато формула
(define (factorial n)
  (define (iter result i)
    (if (> i n)
      result
      (iter (* i result) (+ i 1))))
  (iter 1 1))

tail-рекурсивна, так как является лишь замаскированной итерацией.
-- Андрей
Re[5]: Факториал
От: FractalizeR  
Дата: 02.12.07 23:22
Оценка:
FR>Вполне может привести к тому что называется функциональной декомпозицей и функциональным программированием, и вполне вероятно что человек холрошо владеющей таким стилем программирования более квалифицирован чем средний программист.

Тогда, конечно, у Вас есть собственное объяснение тому, что именно имел ввиду Стив Макконнелл говоря эти слова, не так ли? Не поделитесь с нами своими соображениями?
Re[4]: Факториал
От: FR  
Дата: 03.12.07 08:27
Оценка:
Здравствуйте, Андрей Коростелев, Вы писали:

АК>tail-рекурсивна, так как является лишь замаскированной итерацией.


Есть мнение что наоборот любая итерация это замаскированная рекурсия
Re[9]: Факториал
От: FractalizeR  
Дата: 03.12.07 11:59
Оценка:
Здравствуйте, Igor Sukhov, Вы писали:
IS>Ни фига не понял что ты написал.
Сочувствую.
Re[7]: Факториал
От: FractalizeR  
Дата: 03.12.07 12:06
Оценка:
Здравствуйте, FR, Вы писали:
FR>Стив написал отличную книгу, из нее же видно, что у него нет никакого опыта программирования в функциональном стиле, так что, чтобы он не говорил про рекурсию, это будет равноценно рассуждениям закоренелого сишника о вреде виртуальных функций.

Понятно. С таким самомнением как у вас, я бы уже стал президентом... И что вы делаете среди программистов?
Re[8]: Факториал
От: FR  
Дата: 03.12.07 13:05
Оценка:
Здравствуйте, FractalizeR, Вы писали:

FR>Здравствуйте, FR, Вы писали:

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

FR>Понятно. С таким самомнением как у вас, я бы уже стал президентом... И что вы делаете среди программистов?


При чем тут мое самомнение?
В книге нет и намека на функциональщину, при этом императивное и ООП программирование (конструирование) разложены буквально по косточкам, думаю вывод из этого должен быть вполне однозначным.
Или вы думаете что Макконел авторитет абсолютно во всем?
Re[9]: Факториал
От: FractalizeR  
Дата: 03.12.07 14:09
Оценка:
FR>При чем тут мое самомнение?
FR>В книге нет и намека на функциональщину, при этом императивное и ООП программирование (конструирование) разложены буквально по косточкам, думаю вывод из этого должен быть вполне однозначным.
Я думаю, что все в мире относительно. В книге Стива нет ни намека на функциональные языки программирования. И его фраза к ним не относилась. Зачем придавать его словам смысл, которого в них не было?

FR>Или вы думаете что Макконел авторитет абсолютно во всем?

Трудно сказать. Великим людям, как и всем прочим, тоже свойственно ошибаться. Но если у меня будет выбор, чьим словам доверять, его или Вашим, я предпочту его.
Re[10]: Факториал
От: FR  
Дата: 03.12.07 14:38
Оценка:
Здравствуйте, FractalizeR, Вы писали:

FR>Я думаю, что все в мире относительно. В книге Стива нет ни намека на функциональные языки программирования. И его фраза к ним не относилась. Зачем придавать его словам смысл, которого в них не было?


Ну и не надо тогда делать глобальных выводов о вреде и сложности рекурсии.

FR>>Или вы думаете что Макконел авторитет абсолютно во всем?

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

Даже в вопросах в которых он разбирается хуже меня?
Re[11]: Факториал
От: FractalizeR  
Дата: 03.12.07 15:04
Оценка:
FR>Ну и не надо тогда делать глобальных выводов о вреде и сложности рекурсии.
Ну так вот пусть автор, который назвал Стива идиотом и не делает их.

FR>>>Или вы думаете что Макконел авторитет абсолютно во всем?

FR>>Трудно сказать. Великим людям, как и всем прочим, тоже свойственно ошибаться. Но если у меня будет выбор, чьим словам доверять, его или Вашим, я предпочту его.
FR>Даже в вопросах в которых он разбирается хуже меня?
Разумеется. Откуда мне знать, насколько хорошо вы разбираетесь в том или ином вопросе? И откуда вам знать, что в том или ином вопросе Стив разбирается хуже вас?
Re[12]: Факториал
От: FR  
Дата: 03.12.07 15:12
Оценка:
Здравствуйте, FractalizeR, Вы писали:

FR>>Ну и не надо тогда делать глобальных выводов о вреде и сложности рекурсии.

FR>Ну так вот пусть автор, который назвал Стива идиотом и не делает их.

Тут кто называл Стива идиотом, я пропустил, подскажи пожалуйста где именно.

FR>>Даже в вопросах в которых он разбирается хуже меня?

FR>Разумеется. Откуда мне знать, насколько хорошо вы разбираетесь в том или ином вопросе? И откуда вам знать, что в том или ином вопросе Стив разбирается хуже вас?

Я конечно ни знаю насколько хорошо Стив разбирается в функциональном программировании судя по его книге вообще не разбирается. Но кроме меня ( ) и Стива много других авторитетных м уважаемых людей, и многие из них (те которые в теме) вполне соглашаются с высказыванием одного из них "Итерация свойственна человеку, рекурсия божественна"
Re[13]: Факториал
От: FractalizeR  
Дата: 03.12.07 17:32
Оценка:
FR>>>Ну и не надо тогда делать глобальных выводов о вреде и сложности рекурсии.
FR>>Ну так вот пусть автор, который назвал Стива идиотом и не делает их.

FR>Тут кто называл Стива идиотом, я пропустил, подскажи пожалуйста где именно.


http://www.rsdn.ru/forum/message/2744117.1.aspx
Автор: Igor Sukhov
Дата: 27.11.07


FR>Я конечно ни знаю насколько хорошо Стив разбирается в функциональном программировании судя по его книге вообще не разбирается. Но кроме меня ( ) и Стива много других авторитетных м уважаемых людей, и многие из них (те которые в теме) вполне соглашаются с высказыванием одного из них "Итерация свойственна человеку, рекурсия божественна"

Но только не в том случае, где она легко может привести к переполнению стека. Кроме того, программирование, мне кажется, слишком серьёзная вещь, чтобы какой бы то ни было рецепт можно было бы считать срабатывающим в 100% случаев.
Re[14]: Факториал
От: FR  
Дата: 03.12.07 17:41
Оценка:
Здравствуйте, FractalizeR, Вы писали:

FR>>Тут кто называл Стива идиотом, я пропустил, подскажи пожалуйста где именно.


FR>http://www.rsdn.ru/forum/message/2744117.1.aspx
Автор: Igor Sukhov
Дата: 27.11.07


Ну я его идиотом не считаю, но с тем что звизидит согласен

FR>>Я конечно ни знаю насколько хорошо Стив разбирается в функциональном программировании судя по его книге вообще не разбирается. Но кроме меня ( ) и Стива много других авторитетных м уважаемых людей, и многие из них (те которые в теме) вполне соглашаются с высказыванием одного из них "Итерация свойственна человеку, рекурсия божественна"

FR>Но только не в том случае, где она легко может привести к переполнению стека. Кроме того, программирование, мне кажется, слишком серьёзная вещь, чтобы какой бы то ни было рецепт можно было бы считать срабатывающим в 100% случаев.

Конечно рекурсией как и любыми другими техниками (бесконечный цикл сделать тоже не трудно) нужно уметь пользоватся. Меня просто несколько задели и удивили высказывания о том что базовую вещь которую любой программист просто обязан знать, как будто не понимают чуть ли не большинство.
Re[15]: Факториал
От: FractalizeR  
Дата: 03.12.07 18:27
Оценка:
FR>Конечно рекурсией как и любыми другими техниками (бесконечный цикл сделать тоже не трудно) нужно уметь пользоватся. Меня просто несколько задели и удивили высказывания о том что базовую вещь которую любой программист просто обязан знать, как будто не понимают чуть ли не большинство.

Прошу прощения, я, наверное, неясно выразился. Конечно же, если человек не понимает или не умеет использовать рекурсию — какой из него программист? Это почти тоже самое, на мой взгляд, что циклы не понимать.
Re[2]: Факториал
От: deniok Россия  
Дата: 04.12.07 00:37
Оценка:
Здравствуйте, Tilir, Вы писали:


T>Есть кайф... Вот как можно вычислить факториал на Haskell. Я люблю этот язык ))


T>

[skiped]

T>int = cata phi where
T>  phi  Z    = 0
T>  phi (S f) = 1 + f

T>instance Show (Mu N) where
T>  show = show . int
T>


Здесь лишняя N-алгебра типа N Integer -> Integer, которая катаморфизируется в int. Требуется только для отладки и тестирования Для вычисления факториала не нужна.
Re[11]: Факториал
От: FractalizeR  
Дата: 04.12.07 10:36
Оценка:
Здравствуйте, Igor Sukhov, Вы писали:

IS>Здравствуйте, FractalizeR, Вы писали:


IS>>>Ни фига не понял что ты написал.

FR>>Сочувствую.
IS>Да все нормально, я думаю со времением научишься писать понятно и люди начнут обращать внимание на написанное тобою.
Все возможно. Возможно, и Вы со временем научитесь без проблем читать предложения, в которых больше пяти слов.
Re[12]: Факториал
От: Igor Sukhov  
Дата: 04.12.07 23:25
Оценка:
Здравствуйте, FractalizeR, Вы писали:

FR>>>Сочувствую.

IS>>Да все нормально, я думаю со времением научишься писать понятно и люди начнут обращать внимание на написанное тобою.
FR>Все возможно. Возможно, и Вы со временем научитесь без проблем читать предложения, в которых больше пяти слов.

Добро пожаловать в мой фан-клуб =)
* thriving in a production environment *
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.