Ihre Aufgabe ist es, die n- te Fibonacci-Zahl zu finden, aber n muss nicht unbedingt eine ganze Zahl sein.
Die mit 0 indizierte Fibonacci-Sequenz lautet wie folgt:
0, 1, 2, 3, 4, 5, 6, 7, ...
1, 1, 2, 3, 5, 8, 13, 21, ...
Was passiert jedoch, wenn wir die 2,4- te Zahl wollen?
Die 2,4- te Zahl ist das 0,4-fache der Differenz zwischen der dritten und der zweiten Fibonacci-Zahl plus der zweiten Fibonacci-Zahl. So ist die 2.4 th ist Fibonacci - Zahl 2 + 0.4 * (3 – 2) = 2.4
.
Ähnlich ist die 6.35 th ist Fibonacci - Zahl 13 + 0.35 * (21 – 13) = 15.8
.
Ihre Aufgabe ist es, die n- te Fibonacci-Zahl zu finden, sodass n größer oder gleich 0 ist.
Sie können dies null- oder einsindiziert tun, sagen Sie einfach, welches Sie verwenden.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
Einige weitere Beispiele:
0 1
4.5 6.5
0.7 1
7 21
F_0 = 0
undF_2 = 1
habenF_1 = (1/2)(F_0 + F_2) = 1/2
.Antworten:
Gelee , 5 Bytes
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.quelle
+¡
ist es für Fibonacci-Herausforderungen? War es¡
sinnvoll, mit Dyaden wie Fibonacci zu arbeiten?%1+¡
: lineare Interpolation zwischen n × F (n) bei n und n × F (n - 1) + F (n) bei n - & epsi ; und Aufwärtsschritt zwischen n - & epsi; und n .%1+¡
soll ich tun?Mathematica, 32 Bytes
Reine Funktion, die eine nichtnegative reelle Zahl als Eingabe verwendet und eine reelle Zahl zurückgibt. Wenn dies
1~Max~#
durch ersetzt1
würde, wäre dies die standardmäßige rekursive Definition der 0-indizierten Fibonacci-Zahlen für ganzzahlige Argumente. Ist1~Max~#
aber die richtige stückweise lineare Funktion für reelle Eingaben zwischen 0 und 2, und die Rekursion kümmert sich um den Rest. (Wissenswertes: Um dies in die 1-indizierten Fibonacci-Zahlen umzuwandeln, müssen Sie einfach dasMax
in aMin
! Ändern. )Das kürzeste, was ich mit dem eingebauten bekommen konnte, ist das 37-Byte
(b=Fibonacci)[i=Floor@#](#-i)+b[i+1]&
.quelle
Python 2 , 42 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 30 Byte
Triviale Modifikation der nullindexierten rekursiven Fibonacci-Sequenzdefinition. Bei einigen Eingaben können leichte Rundungsfehler auftreten.
quelle
Jelly ,
1712 BytesProbieren Sie es online!
Nicht eingebaute Lösung.
Erläuterung
Hilfsfunktion
1Ŀ
Hauptprogramm
Eine Eingabe im Bereich von 0 bis 1 wird daher zu 0 gesättigt subtrahiert, daher addieren wir 1, um F (0) = F (1) = 1 zu erhalten. Eine Eingabe im Bereich von 1 bis 2 gibt sich von selbst zurück. Diese Basisfälle reichen aus, um eine typische Fibonacci-Rekursion durchzuführen und die anderen Werte von dort zu berechnen.
quelle
Excel,
137 124 119 113 10297 BytesNicht rekursiver / iterativer Ansatz. (Berechnen Sie direkt die n-ten Terme.) Hierbei wird die Methode mit einem Index verwendet. Durch Hinzufügen
+1
zu wird=TRUNC(B1)
der Index auf Null gesetzt.Das Code-Snippet soll ab Zelle A1 platziert werden .
Die Eingabezelle ist B1 . Die Ausgabezelle ist A1 .
quelle
JavaScript (ES6),
6764 BytesHat ein paar Probleme mit der Rundung
Versuch es
quelle
PHP, 90 Bytes
Online Version
quelle
Jelly ,
139 BytesDies verwendet die gleiche Indizierung wie die Herausforderungsspezifikation.
Probieren Sie es online!
Hintergrund
Gemäß der Spezifikation gilt F (n + x) = F (n) + (F (n + 1) - F (n)) x für natürliches n und 0 ≤ x <1 . Da F (n + 1) = F (n) + F (n - 1) ist , kann dies als F (n + x) = F (n) + F (n - 1) x umgeschrieben werden .
Darüber hinaus definiert die in der Herausforderungsspezifikation verwendete Indizierung eine Funktion f (n) = F (n + 1) (wobei F die übliche Fibonacci-Funktion ist, dh F (0) = 0 ), sodass wir die Formel f (n) erhalten + x) = F (n + 1) + F (n) x .
Wie es funktioniert
quelle
Perl 6 ,
4838 Bytes48
Versuch es
38
Versuch es
Erweitert:
48
(
$0
und$1
steht für$/[0]
und$/[1]
)38
Dies wurde von anderen Python- und Javascript- Lösungen inspiriert
quelle
Julia 0,5 , 31 Bytes
Dies ist im Grunde nur Rods übersetzte Antwort.
Probieren Sie es online!
quelle