Os números subfatoriais ou rencontros ( A000166 ) são uma sequência de números semelhante aos números fatoriais que aparecem na combinatória de permutações. Em particular, o n º subfactorial ! N dá o número de desarranjos de um conjunto de n elementos. Um desarranjo é uma permutação na qual nenhum elemento permanece na mesma posição. O subfatorial pode ser definido através da seguinte relação de recorrência:
!n = (n-1) (!(n-1) + !(n-2))
De fato, a mesma relação de recorrência vale para o fatorial, mas para o subfatorial partimos de:
!0 = 1
!1 = 0
(Para o fatorial, teríamos, é claro, 1! = 1. )
Sua tarefa é calcular ! N , dado n .
Regras
Como o fatorial, o subfatorial cresce muito rapidamente. Não há problema se o seu programa puder lidar apenas com entradas n , de forma que ! N possa ser representado pelo tipo de número nativo do seu idioma. Entretanto, em teoria , seu algoritmo deve trabalhar para n arbitrário . Isso significa que você pode assumir que os resultados integrais e o valor intermediário podem ser representados exatamente pelo seu idioma. Observe que isso exclui a constante e se ela é armazenada ou calculada com precisão finita.
O resultado precisa ser um número inteiro exato (em particular, você não pode aproximar o resultado com notação científica).
Você pode escrever um programa ou uma função e usar qualquer um dos métodos padrão de recebimento de entrada e saída.
Você pode usar qualquer linguagem de programação , mas observe que essas brechas são proibidas por padrão.
Isso é código-golfe , então a resposta mais curta e válida - medida em bytes - vence.
Casos de teste
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