В интересах науки я провел профилирование различных реализаций алгоритмов для вычисления факториалов. Я создал итеративную, поисковую таблицу и рекурсивные реализации каждого в C # и C ++. Я ограничил максимальное входное значение до 12 или меньше, так как 13! больше 2 ^ 32 (максимальное значение, которое может храниться в 32-битном int). Затем я запускал каждую функцию 10 миллионов раз, циклически просматривая возможные входные значения (т.е. увеличивая i с 0 до 10 миллионов, используя i по модулю 13 в качестве входного параметра).
Вот относительное время выполнения для различных реализаций, нормализованных к итерационным цифрам C ++:
C++ C#
---------------------
Iterative 1.0 1.6
Lookup .28 1.1
Recursive 2.4 2.6
И, для полноты, вот относительное время выполнения для реализаций, использующих 64-битные целые числа и допускающих входные значения до 20:
C++ C#
---------------------
Iterative 1.0 2.9
Lookup .16 .53
Recursive 1.9 3.9