Su tarea es encontrar el n º número de Fibonacci, pero n no es necesariamente un número entero.
La secuencia de Fibonacci, indexada en 0, es la siguiente:
0, 1, 2, 3, 4, 5, 6, 7, ...
1, 1, 2, 3, 5, 8, 13, 21, ...
Sin embargo, ¿qué ocurre si queremos que el 2 0.4 º número?
El 2,4 º número es de 0,4 veces la diferencia entre la 3 rd y 2 nd números de Fibonacci más el 2 nd número de Fibonacci. Entonces, el número 2.4 de Fibonacci es 2 + 0.4 * (3 – 2) = 2.4
.
Del mismo modo, el número 6.35 de Fibonacci es 13 + 0.35 * (21 – 13) = 15.8
.
Su tarea es encontrar el n º número de Fibonacci, de modo que n es mayor o igual a 0.
Puede hacer esto con un índice cero o uno, solo indique cuál está usando.
Este es el código de golf , por lo que gana el código más corto en bytes.
Algunos ejemplos más:
0 1
4.5 6.5
0.7 1
7 21
F_0 = 0
yF_2 = 1
, deberíamos haberlo hechoF_1 = (1/2)(F_0 + F_2) = 1/2
.Respuestas:
Jalea , 5 bytes
Esta es una solución iterativa sin elementos integrados. Utiliza la misma indexación que la especificación de desafío.
Pruébalo en línea!
Antecedentes
Sea f la función definida en la especificación de desafío y F la función de Fibonacci definida como de costumbre (es decir, con F (0) = 0 ). Para un número entero no negativo n , tenemos f (n) = F (n + 1) . Cuando 0 ≤ x <1 , la especificación de desafío define f (n + x) como f (n) + (f (n + 1) - f (n)) x .
Claramente, esto sólo afecta a los casos base, pero no la fórmula recursiva, es decir, f (n) = f (n - 1) + f (n - 2) ejerce como lo haría para F . Esto significa que podemos simplificar la definición de argumentos no enteros a f (n) = f (n) + f (n - 1) x más fácil .
Como otros han señalado en sus respuestas, la relación recursiva también es válida para argumentos no enteros. Esto es fácilmente verificable, ya que
Desde f (0) = f (1) = 1 , f en constante en el intervalo [0, 1] y f (0 + x) = 1 para todos x . Además, f (-1) = F (0) = 0 , entonces f (-1 + x) = f (-1) + (f (0) - f (-1)) x = 0 + 1x = x . Estos casos básicos cubren en [-1, 1) , por lo que junto con la fórmula recursiva, completan la definición de f .
Cómo funciona
Como antes, dejemos que n + x sea el único argumento de nuestro programa monádico.
¡
es un rápido , lo que significa que consume algunos enlaces a su izquierda y los convierte en un enlace rápido .¡
en particular consume uno o dos enlaces.<F:monad|dyad><N:any>
llama al enlace N , devuelve r , y ejecuta F un total de r veces.<nilad|missing><F:monad|dyad>
establece r en el último argumento de línea de comandos (o una entrada de STDIN en su ausencia) y ejecuta F un total de r veces.Como
1
es un nilad (un enlace sin argumentos), se aplica el segundo caso, y+¡
se ejecutará+
n veces (un argumento no entero se redondea hacia abajo). Después de cada llamada a+
, el argumento izquierdo del enlace rápido se reemplaza con el valor de retorno, y el argumento derecho con el valor anterior del argumento izquierdo.En cuanto a todo el programa,
Ḟ
coloca la entrada, produciendo n ; luego_
reste el resultado de la entrada, produciendo ** x, que se convierte en el valor de retorno.1+¡
luego llama+¡
, como se describió anteriormente, con el argumento izquierdo 1 = f (0 + x) y el argumento derecho x = f (-1 + x) , que calcula la salida deseada.fuente
+¡
es para los desafíos de Fibonacci. ¿Fue útil¡
trabajar como fibonacci con díadas?%1+¡
: interpolación lineal entre n × F (n) en n y n × F (n-1) + F (n) en n-ε , y subir entre n-ε y n .%1+¡
supone que debe hacer?Mathematica, 32 bytes
Función pura que toma un número real no negativo como entrada y devuelve un número real. Si
1~Max~#
se reemplazaran por1
, esta sería la definición recursiva estándar de los números de Fibonacci indexados en 0 para argumentos enteros. Pero1~Max~#
es la función lineal por partes correcta para entradas reales entre 0 y 2, y la recursión se encarga del resto. (Dato curioso: ¡cambiar esto a los números de Fibonacci indexados en 1 se puede lograr simplemente cambiando elMax
a aMin
!)Lo más corto que pude obtener con el incorporado es el byte 37
(b=Fibonacci)[i=Floor@#](#-i)+b[i+1]&
.fuente
Python 2 , 42 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 30 bytes
Modificación trivial de la definición de secuencia de Fibonacci recursiva indexada a cero. Puede dar pequeños errores de redondeo para algunas entradas.
fuente
Jalea ,
1712 bytesPruébalo en línea!
Solución no incorporada.
Explicación
Función auxiliar
1Ŀ
Programa principal
Una entrada en el rango de 0 a 1, por lo tanto, se restará saturada a 0, por lo tanto, sumamos 1 para obtener F (0) = F (1) = 1. Se devolverá una entrada en el rango de 1 a 2. Esos casos básicos son suficientes para hacer una típica recursión de Fibonacci y calcular los otros valores a partir de ahí.
fuente
Excel,
13712411911310297BytesEnfoque no recursivo / iterativo. (Calcule directamente los enésimos términos) Esto utiliza el índice de uno método de . Agregar
+1
a lo=TRUNC(B1)
cambia a cero indexado.El fragmento de código está destinado a colocarse comenzando en la celda A1 .
La celda de entrada es B1 . La celda de salida es A1 .
fuente
JavaScript (ES6),
6764 bytesTiene algunos problemas con el redondeo.
Intentalo
fuente
PHP, 90 bytes
Versión en línea
fuente
Jalea ,
139 bytesUtiliza la misma indexación que la especificación de desafío.
Pruébalo en línea!
Antecedentes
Según la especificación, tenemos F (n + x) = F (n) + (F (n + 1) - F (n)) x , para n natural y 0 ≤ x <1 . Como F (n + 1) = F (n) + F (n - 1) , esto puede reescribirse como F (n + x) = F (n) + F (n - 1) x .
Además, la indexación utilizada en la especificación de desafío define una función f (n) = F (n + 1) (donde F es la función de Fibonacci habitual, es decir, F (0) = 0 ), por lo que obtenemos la fórmula f (n + x) = F (n + 1) + F (n) x .
Cómo funciona
fuente
Perl 6 ,
4838 bytes48
Intentalo
38
Intentalo
Expandido:
48
(
$0
y$1
es la abreviatura de$/[0]
y$/[1]
)38
Esto fue inspirado por otras soluciones de Python y Javascript
fuente
Julia 0.5 , 31 bytes
Esto es básicamente solo la respuesta de Rod traducida.
Pruébalo en línea!
fuente