У subfactorial або Rencontres номер ( A000166 ) являє собою послідовність чисел , подібних факторним числа , які показують в комбінаториці перестановок. Зокрема, n- й підфактор ! N дає кількість дерангувань набору з n елементів. Дезорганізація - перестановка, в якій жоден елемент не залишається в тому ж положенні. Підфактор можна визначити за допомогою наступного відношення:
!n = (n-1) (!(n-1) + !(n-2))
Насправді, однакове відношення повторення має місце і для факторіалу, але для субфакторалу ми починаємо з:
!0 = 1
!1 = 0
(Для фабрикантів ми мали б, звичайно, 1! = 1. )
Ваше завдання - обчислити ! N , задану n .
Правила
Як і факторний, субфакториал росте дуже швидко. Добре, якщо ваша програма може обробляти лише входи n такі, що ! N може бути представлено типом рідного номера вашої мови. Однак ваш алгоритм повинен теоретично працювати для довільних n . Це означає, що ви можете припустити, що інтегральні результати та проміжне значення можуть бути представлені саме вашою мовою. Зауважте, що це виключає константу e, якщо вона зберігається або обчислюється з обмеженою точністю.
Результат повинен бути точним цілим числом (зокрема, ви не можете зблизити результат науковими позначеннями).
Ви можете написати програму або функцію та використовувати будь-який із стандартних методів отримання вводу та надання виводу.
Ви можете використовувати будь-яку мову програмування , але зауважте, що ці лазівки за замовчуванням заборонені.
Це код-гольф , тому найкоротший вірний відповідь - вимірюється в байтах - виграє.
Випробування
n !n
0 1
1 0
2 1
3 2
4 9
5 44
6 265
10 1334961
12 176214841
13 2290792932
14 32071101049
20 895014631192902121
21 18795307255050944540
100 34332795984163804765195977526776142032365783805375784983543400282685180793327632432791396429850988990237345920155783984828001486412574060553756854137069878601