Sua tarefa é encontrar o n º número de Fibonacci, mas n não é necessariamente um número inteiro.
A sequência de Fibonacci, indexada em 0, é a seguinte:
0, 1, 2, 3, 4, 5, 6, 7, ...
1, 1, 2, 3, 5, 8, 13, 21, ...
No entanto, o que acontece se quisermos o número 2 .4 th ?
O 2,4º número é 0,4 vezes a diferença entre o 3º e o 2º número de Fibonacci mais o 2º número de Fibonacci. Assim, o 2.4 th número de Fibonacci é 2 + 0.4 * (3 – 2) = 2.4
.
Da mesma forma, a 6,35 th número de Fibonacci é 13 + 0.35 * (21 – 13) = 15.8
.
Sua tarefa é encontrar o n º número de Fibonacci, de tal forma que n é maior ou igual a 0.
Você pode fazer isso com índice zero ou um, apenas diga qual você está usando.
Isso é código-golfe , então o código mais curto em bytes vence!
Mais alguns exemplos:
0 1
4.5 6.5
0.7 1
7 21
F_0 = 0
eF_2 = 1
devemos terF_1 = (1/2)(F_0 + F_2) = 1/2
.Respostas:
Gelatina , 5 bytes
Esta é uma solução iterativa sem built-ins. Ele usa a mesma indexação que a especificação do desafio.
Experimente online!
fundo
Seja f a função definida na especificação de desafio e F a função Fibonacci definida como de costume (ou seja, com F (0) = 0 ). Para um número inteiro não negativo n , temos f (n) = F (n + 1) . Quando 0 ≤ x <1 , a especificação de desafio define f (n + x) como f (n) + (f (n + 1) - f (n)) x .
Claramente, esta apenas atinge os casos de base, mas não a fórmula recursiva, isto é, f (n) = f (n - 1) + f (n - 2) mantém como o faria para F . Isso significa que podemos simplificar a definição de argumentos não inteiros para facilitar f (n) = f (n) + f (n - 1) x .
Como outros observaram em suas respostas, o relacionamento recursivo também vale para argumentos não inteiros. Isso é facilmente verificável, pois
Desde F (0) = F (1) = 1 , f em constante no intervalo [0, 1] e f (0 + x) = 1 para todos os x . Além disso, f (-1) = F (0) = 0 , então f (-1 + x) = f (-1) + (f (0) - f (-1)) x = 0 + 1x = x . Esses casos básicos cobrem em [-1, 1) ; portanto, juntamente com a fórmula recursiva, eles completam a definição de f .
Como funciona
Como antes, seja n + x o único argumento de nosso programa monádico.
¡
é uma rápida , o que significa que ele consome alguns links para a sua esquerda e os transforma em um link rápido .¡
em particular, consome um ou dois links.<F:monad|dyad><N:any>
chama o link N , retornando r , e executa F um total de r vezes.<nilad|missing><F:monad|dyad>
define r para o último argumento da linha de comando (ou uma entrada de STDIN na ausência deles) e executa F um total de r vezes.Como
1
é um nilad (um link sem argumentos), o segundo caso se aplica e+¡
será executado+
n vezes (um argumento não inteiro é arredondado para baixo). Após cada chamada para+
, o argumento esquerdo do link rápido é substituído pelo valor retornado, e o argumento direito pelo valor anterior do argumento esquerdo.Quanto ao programa inteiro,
Ḟ
pisa a entrada, produzindo n ; então_
subtrair o resultado a partir da entrada, dando origem a ** x, o que torna o valor de retorno.1+¡
então chama+¡
- como descrito anteriormente - com o argumento esquerdo 1 = f (0 + x) e o argumento direito x = f (-1 + x) , que calcula a saída desejada.fonte
+¡
é para os desafios de Fibonacci. Foi proposital ter um¡
trabalho como fibonacci com díades?%1+¡
: interpolação linear entre n × F (n) em n e n × F (n-1) + F (n) em n-ε e aumenta entre n-ε e n .%1+¡
deveria fazer?Mathematica, 32 bytes
Função pura, recebendo um número real não negativo como entrada e retornando um número real. Se
1~Max~#
fosse substituído por1
, essa seria a definição recursiva padrão dos números de Fibonacci indexados em 0 para argumentos inteiros. Mas1~Max~#
é a função linear por partes correta para entradas reais entre 0 e 2, e a recursão cuida do resto. (Fato trivial: alterar isso para os números de Fibonacci indexados em 1 pode ser realizado simplesmente alterando oMax
para aMin
!)O mais curto que pude obter com o built-in é o de 37 bytes
(b=Fibonacci)[i=Floor@#](#-i)+b[i+1]&
.fonte
Python 2 , 42 bytes
Experimente online!
fonte
JavaScript (ES6), 30 bytes
Modificação trivial da definição de sequência de Fibonacci recursiva indexada a zero. Pode causar pequenos erros de arredondamento para algumas entradas.
fonte
Geléia ,
1712 bytesExperimente online!
Solução não embutida.
Explicação
Função auxiliar
1Ŀ
Programa principal
Uma entrada no intervalo de 0 a 1, portanto, subtrai saturada para 0, portanto, adicionamos 1 para obter F (0) = F (1) = 1. Uma entrada no intervalo de 1 a 2 retornará automaticamente. Esses casos básicos são suficientes para fazer uma recursão típica de Fibonacci e calcular os outros valores a partir daí.
fonte
Excel,
137 124 119 113 10297 BytesAbordagem não recursiva / iterativa. (Calcular diretamente os enésimos termos) Usa o método de um índice . Adicionando
+1
a=TRUNC(B1)
altera para indexado a zero.O trecho de código deve ser colocado começando na célula A1 .
A célula de entrada é B1 . A célula de saída é A1 .
fonte
JavaScript (ES6),
6764 bytesTem alguns problemas com o arredondamento
Tente
fonte
PHP, 90 bytes
Versão Online
fonte
Geléia ,
139 bytesIsso usa a mesma indexação que a especificação do desafio.
Experimente online!
fundo
Pela especificação, temos F (n + x) = F (n) + (F (n + 1) - F (n)) x , para n natural e 0 ≤ x <1 . Como F (n + 1) = F (n) + F (n - 1) , isso pode ser reescrito como F (n + x) = F (n) + F (n - 1) x .
Além disso, a indexação usada na especificação de desafio define uma função f (n) = F (n + 1) (onde F é a função Fibonacci usual, ou seja, F (0) = 0 ), então obtemos a fórmula f (n + x) = F (n + 1) + F (n) x .
Como funciona
fonte
Perl 6 ,
4838 bytes48.
Tente
38.
Tente
Expandido:
48.
(
$0
e$1
é a abreviação de$/[0]
e$/[1]
)38.
Isso foi inspirado em outras soluções Python e Javascript
fonte
Julia 0,5 , 31 bytes
Isso é basicamente apenas a resposta de Rod traduzida.
Experimente online!
fonte