_Ḟ1+¡
Dies ist eine iterative Lösung ohne integrierte Funktionen. Es wird die gleiche Indizierung wie für die Challenge-Spezifikation verwendet.
Probieren Sie es online!
Hintergrund
Sei f die in der Challenge-Spezifikation definierte Funktion und F die wie üblich definierte Fibonacci-Funktion (dh mit F (0) = 0 ). Für eine nicht negative ganze Zahl n gilt f (n) = F (n + 1) . Wenn 0 ≤ x <1 ist , definiert die Herausforderungsspezifikation f (n + x) als f (n) + (f (n + 1) - f (n)) x .
Natürlich betrifft dies nur die Basis Fällen, aber nicht die rekursive Formel, dh f (n) = f (n - 1) + f (n - 2) hält , wie es wäre für F . Dies bedeutet, dass wir die Definition für nicht ganzzahlige Argumente vereinfachen können, um f (n) = f (n) + f (n - 1) x zu vereinfachen .
Wie andere in ihren Antworten angemerkt haben, gilt die rekursive Beziehung auch für nicht ganzzahlige Argumente. Dies ist leicht nachprüfbar, da

Da f (0) = f (1) = 1 ist , ist f im Intervall [0, 1] konstant und f (0 + x) = 1 für alle x . Weiterhin ist f (-1) = F (0) = 0 , so dass f (-1 + x) = f (-1) + (f (0) - f (-1)) x = 0 + 1x = x . Diese Basisfälle decken [-1, 1) ab , sodass sie zusammen mit der rekursiven Formel die Definition von f vervollständigen .
Wie es funktioniert
Nach wie vor sei n + x das einzige Argument unseres monadischen Programms.
¡
ist ein Quicklink , das heißt, er verbraucht einige Links zu seiner Linken und verwandelt sie in einen Quicklink . ¡
verbraucht insbesondere entweder ein oder zwei Links.
<F:monad|dyad><N:any>
ruft die Verbindung N auf , gibt r zurück und führt F insgesamt r- mal aus.
<nilad|missing><F:monad|dyad>
Sätze r zur letzten Befehlszeilenargument (oder eine Eingabe von STDIN in ihrer Abwesenheit) und führt F insgesamt r mal.
Da 1
es sich um einen Nullwert (eine Verknüpfung ohne Argumente) handelt, gilt der zweite Fall und +¡
wird +
n- mal ausgeführt (ein nicht ganzzahliges Argument wird abgerundet). Nach jedem Aufruf von +
wird das linke Argument des Quicklinks durch den Rückgabewert und das rechte Argument durch den vorherigen Wert des linken Arguments ersetzt.
Für das gesamte Programm wird Ḟ
die Eingabe überschrieben, was n ergibt . _
Subtrahieren Sie dann das Ergebnis von der Eingabe und erhalten Sie ** x, das zum Rückgabewert wird.
1+¡
ruft dann +¡
- wie zuvor beschrieben - mit linkem Argument 1 = f (0 + x) und rechtem Argument x = f (-1 + x) auf , was die gewünschte Ausgabe berechnet.