PowerShell v2 +, 85 79 69 bytes
param($n)$b=1,1;2..$n|%{$b+=$b[$_-$b[$_-1]]+$b[$_-$b[$_-2]]};$b[$n-1]
Recebe a entrada $n
, define $b
como uma matriz de @(1, 1)
e entra em um loop de 2 .. $n
. A cada iteração, aderimos $b
ao cálculo mais recente da sequência com um simples +=
e a definição da sequência. Em seguida, produzimos o número apropriado de $b
(com a -1
porque matrizes no PowerShell são indexadas em zero). Isso funciona se $n
é 1
ou 2
porque esses dois valores são preenchidos previamente nos índices mais baixos $b
desde o início, portanto, mesmo que o loop fique preso no lixo, ele será ignorado de qualquer maneira.
Solução recursiva 78 76 bytes
$a={param($k)if($k-lt3){1}else{(&$a($k-(&$a($k-1))))+(&$a($k-(&$a($k-2))))}}
Na primeira vez que usei o equivalente a um lambda como resposta, como geralmente uma solução iterativa é mais curta (como você pode ver em todas as parênteses aninhadas). Mas, nesse caso, os parênteses aninhados são quase duplicados na solução iterativa com as chamadas de matriz aninhada, portanto, a solução recursiva é mais curta. Não, a solução iterativa é realmente mais curta (veja acima).
Chame isso através do operador de execução, como &$a 20
. Apenas uma ligação recursiva direta.