Ich habe kürzlich eine eigene Sequenz (Piggyback-Sequenz) erstellt, die wie folgt funktioniert:
P(1)
, P(2)
und P(3)
= 1
.
Für alle, P(n)
wo n>3
funktioniert die Sequenz wie folgt:
P(n) = P(n-3) + P(n-2)/P(n-1)
So setzen Sie die Sequenz fort:
P(4)
= 1 + 1/1
=2
P(5)
= 1 + 1/2
= 3/2
=1.5
P(6)
= 1 + 2/(3/2)
= 7/3
=2.33333...
P(7)
= 2 + (3/2)/(7/3)
= 37/14
=2.6428571428...
P(8)
= 3/2 + (7/3)/(37/14)
= 529/222
=2.3828828828...
Ihre Aufgabe ist es, wenn gegeben n
, P(n)
entweder als Gleitkommazahl oder als (im) richtigen Bruch zu berechnen.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
Wenn jemand den Namen der Sequenz finden kann, bearbeiten Sie den Beitrag entsprechend.
P(0)=1
...Antworten:
Python 2,
4039 Bytes.Gibt
True
anstelle von 1, wenn dies nicht erlaubt ist, können wir dies für 42 Bytes haben:Die Art und Weise, wie es funktioniert, ist ziemlich unkompliziert. Der einzige Trick besteht
.0+
darin, das Ergebnis in einen Float umzuwandeln.quelle
x<4
undor
f(x-1.)
Casting verwenden , um zu schweben. In Python 3 müssen Sie überhaupt nicht umsetzen.Haskel, 32 Bytes
Anwendungsbeispiel:
((0#1)1!!) 7
->2.642857142857143
. Ich starte die folge mit0, 1, 1
fix!!
der 0-basierten Indizierung.Bearbeiten: @xnor hat eine Möglichkeit gefunden, von einem 0-basierten zu einem 1-basierten Index zu wechseln, ohne die Byteanzahl zu ändern.
quelle
(0,1,1)
.Ruby, 34 Bytes
Da Ruby standardmäßig die Ganzzahldivision verwendet, stellt sich heraus, dass es kürzer ist, stattdessen Brüche zu verwenden. Golfvorschläge sind willkommen.
quelle
Perl 6 ,
2523 BytesErläuterung:
Dies gibt eine Rat ( Rational ) für Eingaben zurück, die mit 3 beginnen, bis das Ergebnis einen Nenner aufweist, der größer ist als eine 64-Bit-Ganzzahl und an diesem Punkt Num s (Gleitkomma) zurückgibt .
Die letzte Ratte, die es zurückgibt, ist
P(11) == 8832072277617 / 2586200337022
Wenn Sie möchten, dass Rational- Zahlen anstelle von Floats zurückgegeben werden, können Sie sie gegen die folgenden austauschen, wodurch stattdessen eine FatRat zurückgegeben wird.
Prüfung:
quelle
C 46 Bytes
Ideone
quelle
MATL , 15 Bytes
Probieren Sie es online!
Erläuterung
quelle
Cheddar , 31 Bytes
Die ungolfed Version ist so klar, dass Sie keine Erklärung brauchen:
Grundsätzlich können Sie nach den Funktionsargumenten die zu verwendende Variable angeben, die für die Funktion selbst festgelegt wird. Warum? denn diese funktion wird tail-call-optimiert oder sollte es zumindest sein.
quelle
Javascript (ES6), 31 Byte
Eine einfache Funktion.
quelle
P=n=>n<4?1:P(n-3)+P(n-2)/P(n-1)
function
. Das BitP=n=>[...]
erstellt eine anonyme Funktion, die 1 Parameter (n) akzeptiert. Auf ES6 sind Rückgaben ebenfalls implizit. IstP=n=>5
also eine Funktion, die immer zurückkehrt5
. Sie müssen den Body nur einschließen,{}
wenn Sie mehr als eine Anweisung haben (zB:)P=n=>{alert(1);console.log(1)}
. Da Sie nur 1 (große) Anweisung (den ternären Operator) haben, können Sie den vergessen{}
.05AB1E ,
1817 BytesProbieren Sie es online!
1 Byte dank Luis Mendo gespeichert
quelle
Pyth, 20 Bytes
Probieren Sie es online!
quelle
Gelee , 15 Bytes
Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
R
5347 BytesDiese Antwort machte Gebrauch von der hübschen, ordentlichen Funktion
ifelse
:ifelse(Condition, WhatToDoIfTrue, WhatToDoIfNot)
quelle
return()
in Ihrem Code loszuwerden . Sie müssen die Funktion aber auch benennen, damit Ihre Rekursion funktioniertMathematica, 36 Bytes
Hier sind die ersten Begriffe:
quelle
Dyalog APL, 25 Bytes
⊃{1↓⍵,⍎⍕' +÷',¨⍵}⍣⎕⊢0 1 1
quelle