В 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