Gelée , 5 octets
_Ḟ1+¡
Il s'agit d'une solution itérative sans fonctions intégrées. Il utilise la même indexation que la spécification de défi.
Essayez-le en ligne!
Contexte
Soit f la fonction définie dans la spécification de défi et F la fonction de Fibonacci définie comme d'habitude (c'est-à-dire avec F (0) = 0 ). Pour un entier non négatif n , nous avons f (n) = F (n + 1) . Lorsque 0 ≤ x <1 , la spécification de défi définit f (n + x) comme f (n) + (f (n + 1) - f (n)) x .
De toute évidence, cela affecte seulement les cas de base, mais non pas la formule de récurrence, soit f (n) = f (n - 1) + f (n - 2) tient comme il le ferait pour F . Cela signifie que nous pouvons simplifier la définition d'arguments non entiers vers le plus facile f (n) = f (n) + f (n - 1) x .
Comme d'autres l'ont noté dans leurs réponses, la relation récursive s'applique également aux arguments non entiers. Ceci est facilement vérifiable, car
Puisque f (0) = f (1) = 1 , f en constante dans l'intervalle [0, 1] et f (0 + x) = 1 pour tout x . De plus, f (-1) = F (0) = 0 , donc f (-1 + x) = f (-1) + (f (0) - f (-1)) x = 0 + 1x = x . Ces cas de base couvrent en [-1, 1) , donc avec la formule récursive, ils complètent la définition de f .
Comment ça fonctionne
Comme précédemment, soit n + x le seul argument de notre programme monadique.
¡
est un rapide , ce qui signifie qu'il consomme des liens à sa gauche et les transforme en un lien rapide . ¡
consomme notamment un ou deux liens.
<F:monad|dyad><N:any>
appelle le lien N , renvoyant r , et exécute F un total de r fois.
<nilad|missing><F:monad|dyad>
définit r au dernier argument de la ligne de commande (ou une entrée de STDIN en leur absence) et exécute F un total de r fois.
Puisque 1
c'est un nilad (un lien sans arguments), le second cas s'applique et +¡
s'exécutera +
n fois (un argument non entier est arrondi vers le bas). Après chaque appel à +
, l'argument de gauche du lien rapide est remplacé par la valeur de retour et l'argument de droite par la valeur précédente de l'argument de gauche.
Comme pour tout le programme, les Ḟ
planchers d'entrée, donnant n ; puis _
soustrayez le résultat de l'entrée, ce qui donne ** x, qui devient la valeur de retour.
1+¡
appelle ensuite +¡
- comme décrit précédemment - avec l'argument gauche 1 = f (0 + x) et l'argument droit x = f (-1 + x) , qui calcule la sortie souhaitée.