Você provavelmente todos conhecem a sequência de fibonacci:
fibonacci(n)=fibonacci(n-1)+fibonacci(n-2)
fibonacci(0)=0
fibonacci(1)=1
Sua tarefa é a mais simples possível:
- Dada
N
computação inteirafibonacci(n)
mas aqui está a reviravolta:
- Também negativo
N
Esperar. O que?
fibonacci(1)=fibonacci(0)+fibonacci(-1)
então
fibonacci(-1)=1
e
fibonacci(-2)=fibonacci(0)-fibonacci(1)=-1
e assim por diante...
- Este é um código-golfe, pelo que o programa mais curto em bytes ganha.
- Você pode enviar uma função ou um programa completo
- N está em [-100,100]
Caso (s) de teste em CSV:
-9;-8;-7;-6;-5;-4;-3;-2;-1;0;1;2;3;4;5;6;7;8
34;-21;13;-8;5;-3;2;-1;1;0;1;1;2;3;5;8;13;21
Dica:
n <0 e n & 1 == 0:
fibonacci(n)=fibonacci(abs(n))*-1
Respostas:
Mathematica, 9 bytes
Sim, esta função interna suporta números negativos.
fonte
Oitava, 20 bytes
Experimente online!
Explicação
Isso faz uso do fato de que a sequência de fibonacci
f(n)
pode ser escrita como (essa deve ser uma notação de vetor de matriz):Recursivamente:
Explicitamente:
Isso significa que a entrada superior direita dessa matriz à potência de
n
é o valorf(n)
que estamos procurando. Obviamente, também podemos inverter essa matriz, pois ela possui uma classificação completa, e o relacionamento ainda descreve a mesma relação de recorrência. Isso significa que também funciona para entradas negativas.fonte
ans(-6)
destinado a ser positivo?Máximos, 3 bytes
suporta números positivos e negativos.
Experimente (cole) no CESGA - Maxima on line
fonte
Python, 43 bytes
Uma fórmula direta com a proporção áurea
g
. Comf
a função acima:Mesmo comprimento alt, apenas com o alias da raiz quadrada de 5:
Não vi uma maneira de criar uma função recursiva que pudesse competir com elas. Uma tentativa moderada de 57 bytes:
Para comparação, um método iterativo (60 bytes em Python 2):
Ou, para 58 bytes:
fonte
JavaScript (ES6), 42 bytes
Teste
Mostrar snippet de código
fonte
MATL ,
119 bytesEstou feliz com oObrigado @LuisMendo por -2 bytes =)[3,2]
, que certamente poderia ser jogado, se alguém souber uma maneira, por favor me avise =) (Também funcionaria[1,3]
.)Isso está usando a mesma abordagem que a resposta do Octave . Mas para gerar a matriz
nós apenas convertemos o número
3
e2
de decimal para binário (ie11
e10
).Experimente online!
fonte
JavaScript (ES7) 37 bytes
Usa a fórmula de Binet .
Isso gera o número
n
th de Fibonacci + -0.0000000000000005
.fonte
**
requer ES7.1-p
vez de-1/p
deveria ter funcionado para a mesma economia.Jolf, 2 bytes
Experimente aqui!
O fibonacci embutido, implementado usando a
phi
fórmula.fonte
Haskell, 51 bytes
fonte
,
em vez de&&
:even z,z<0
.PowerShell , 112 bytes
Chamada de demonstração:
Saída da demonstração:
fonte
Lit , 88 bytes
Meu olhar para todos esses parênteses .
Experimente online!
Na verdade, não é muito pequeno. Atualmente, existe um erro de análise que requer um uso
(get N)
ou em(+ N)
vez de simplesmenteN
. Eu escolhi o menor. No entanto, acho que não há nada que possa ser feito ainda mais para jogar golfe.fonte