Fibonacci-Funktion oder -Folge

115

Die Fibonacci-Folge ist eine Folge von Zahlen, wobei jede Zahl in der Folge die Summe der beiden vorhergehenden Zahlen ist. Die ersten beiden Zahlen in der Sequenz sind beide 1.

Hier sind die ersten Begriffe

1 1 2 3 5 8 13 21 34 55 89 ...

Schreiben Sie den kürzesten Code, der entweder:

  • Erzeugt die Fibonacci-Sequenz ohne Ende.

  • Given nberechnet den ndritten Term der Sequenz. (Entweder 1 oder null indiziert)

Sie können Standardformate für Ein- und Ausgabe verwenden.

(Ich habe beide Optionen angegeben, falls eine in der von Ihnen gewählten Sprache einfacher ist als die andere.)


Für die Funktion, die eine annimmt n, muss ein angemessen großer Rückgabewert (mindestens die größte Fibonacci-Zahl, die der normalen Wortgröße Ihres Computers entspricht) unterstützt werden.


Bestenliste

Chris Jester-Young
quelle

Antworten:

48

Perl 6, 10 Zeichen:

Anonyme unendliche Fibonacci-Sequenzliste:

^2,*+*...*

Gleich wie:

0, 1, -> $x, $y { $x + $y } ... Inf;

Sie können es also einem Array zuweisen:

my @short-fibs = ^2, * + * ... *;

oder

my @fibs = 0, 1, -> $x, $y { $x + $y } ... Inf;

Und erhalten Sie die ersten elf Werte (von 0 bis 10) mit:

say @short-fibs[^11];

oder mit:

say @fibs[^11];

Warten Sie, Sie können auch die ersten 50 Nummern aus der anonymen Liste selbst abrufen:

say (^2,*+*...*)[^50]

Das gibt zurück:

0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
10946 17711 28657 46368 75025 121393 196418 317811 514229 832040
1346269 2178309 3524578 5702887 9227465 14930352 24157817 39088169
63245986 102334155 165580141 267914296 433494437 701408733 1134903170 
1836311903 2971215073 4807526976 7778742049

Und ein einfacher Benchmark:

real    0m0.966s
user    0m0.842s
sys     0m0.080s

Mit:

$ time perl6 -e 'say (^2, *+* ... *)[^50]'

EOF

Marco Aurélio da Silva
quelle
Ich würde nicht einmal ^2als Ersatz für denken 0,1. +1
Konrad Borowski
2
Dies ist nicht mehr gültig, Sie müssen es als schreiben |^2,*+*...*, das ist die gleiche Anzahl von Bytes wie 0,1,*+*...*.
Brad Gilbert b2gills
5
Perl ist so komisch.
Cyoce
1
In welcher Version von Perl 6 wurde diese Antwort geschrieben?
CalculatorFeline
3
@CalculatorFeline Es gab eine große Änderung namens GLR (Great List Refactor), die kurz vor der ersten offiziellen Veröffentlichung am 25.12.2015 stattfand. Dieser Code hätte bis zu diesem Zeitpunkt funktioniert.
Brad Gilbert b2gills
73

Brainfuck, 22 Schläge

+>++[-<<[->+>+<<]>>>+]

Erzeugt die Fibonacci-Sequenz, die sich allmählich über das Speicherband bewegt.

R. Martinho Fernandes
quelle
5
Schön! Wörtlich schön! Oder vielleicht auch nicht ... sowieso +1 dafür :)
Per Hornshøj-Schierbeck
2
Dies sind 3,344 oder 4 Bytes in komprimiertem Brainfuck. (6 ln (22)) / ln (256)
Will Sherwood
24
16 Bytes:+[[<+>->+>+<<]>]
Primo
3
14 Bytes:+[.[>+>+<<-]>]
Charlim
2
@Stefnotch natürlich, der kürzere ist destruktiv. Die obige Lösung endet mit der Fibonacci-Sequenz auf dem Band, was auch bei der 16-Byte-Lösung der Fall ist.
Primo
51

Haskell, 17 15 14 Zeichen

f=1:scanl(+)1f

Probieren Sie es online!

Anon.
quelle
4
Warum schneiden Sie nicht zwei Leerzeichen zu f=0:scanl(+)1 f?
R. Martinho Fernandes
@Martinho: Bearbeitet, danke.
Anon.
Wow, das ist noch kürzer als sonst f@(_:x)=0:1:zipWith(+)f x! Muss mich daran erinnern.
FUZxxl
4
Sie können sogar einen anderen Raum Streifen: f=0:scanl(+)1f.
FUZxxl
37

C # 4, 58 Bytes

Stream (69; 65, wenn schwach geschrieben IEnumerable)

(Annahme einer usingRichtlinie für System.Collections.Generic.)

IEnumerable<int>F(){int c=0,n=1;for(;;){yield return c;n+=c;c=n-c;}}

Einzelwert (58)

int F(uint n,int x=0,int y=1){return n<1?x:F(n-1,y,x+y);}
Jon Skeet
quelle
6
Vorausgesetzt, es nist ein uint, n==0kann auf verkürzt werden n<1. Und der Stream kann ein paar Zeichen einsparen, indem er den Platz nach dem generischen Typ freigibt und xin einem größeren Umfang als erforderlich deklariert . In der Tat Graben xganz:n+=c;c=n-c;
Peter Taylor
1
@Peter: Danke, werde nach einiger Zeit nachbearbeiten.
Jon Skeet
Ihre Einzelwertversion ist so lange gültig, wie mein rekursiver Lambda-Ausdruck antwortet ... nett!
Andrew Gray
1
@wizzwizz4 wenn ich mich nicht irre, wenn das klappt !n, dann solltest ndu das eben kippen , wenn bedingt.
Cyoce
3
@ JonSkeet Aw. Und hier dachte ich, ich hätte Jon Skeet bei C # geschlagen ... :-)
wizzwizz4
32

GolfScript, 12

Jetzt nur noch 12 Zeichen!

1.{[email protected]+.}do
jtjacques
quelle
+1 schöne Arbeit. Wenn Sie es kürzer als 13 Zeichen machen, werde ich Ihre Antwort sofort akzeptieren (es sei denn, jemand macht eine noch kürzere Antwort, natürlich). :-P
Chris Jester-Young
1
Ich liebe eine Herausforderung. Getan! ;-)
jtjacques
Schön, dass du gewinnst. Zumindest, bis jemand etwas noch kürzer macht (wenn das überhaupt möglich ist). :-P
Chris Jester-Young
5
Diese Definition ist fast so kurz wie der Name 'Fibonacci' selbst! +1
Agent-j
23

> <> - 15 Zeichen

0:nao1v LF a+@:n:<o
Kevin Brown
quelle
Sie können es jedoch auf kürzen, 0:nao1v LF a+@:n:<owenn Sie möchten. Gibt 15 :) In der Tat macht dies auch die Ausgabe etwas lesbarer ...
Tomsmeding
5
13 Zeichen:01r:nao$:@+$r
Randomra
21

J, 10 Zeichen

Unter Verwendung der eingebauten Berechnung der Taylorreihenkoeffizienten kann es also zu geringfügigem Betrug kommen. Hab es hier gelernt .

   (%-.-*:)t.

   (%-.-*:)t. 0 1 2 3 4 5 10 100
0 1 1 2 3 5 55 354224848179261915075
randomra
quelle
2
@aditsu (q:^-^:p) 6ist, 64 729wo p gerade ist. J ist wahrscheinlich gut für das, was es Rätsel macht. :)
Randomra
2
Noch besser: (<:^-^:>) 4ist 81und <:^-^:> 4ist 53.5982.
Randomra
2
Das hier gezeigte Emoji ist das, wonach der gesamte J-Code streben sollte. Eine andere Alternative ist die +/@:!&i.-Verwendung von 9 Bytes.
Meilen
1
@miles Sehr schön! Du solltest es posten, da es völlig anders ist als meins.
Randomra
21

Hexagonie ,18 14 12

Danke Martin für 6 Bytes!

1="/}.!+/M8;

Erweitert:

  1 = "
 / } . !
+ / M 8 ;
 . . . .
  . . .

Probieren Sie es online aus


Alt, antworte. Dies wird beibehalten, da die Bilder und Erläuterungen für neue Hexagony-Benutzer hilfreich sein können.

!).={!/"*10;$.[+{]

Erweitert:

  ! ) .
 = { ! /
" * 1 0 ;
 $ . [ +
  { ] .

Dies gibt die Fibonacci-Sequenz aus, die durch Zeilenumbrüche getrennt ist.

Probieren Sie es online! Seien Sie vorsichtig, der Online-Interpreter mag keine unendlichen Ausgaben.

Erläuterung

Es gibt zwei "Unterprogramme" für dieses Programm, die jeweils von einer der beiden verwendeten IPs ausgeführt werden. Die erste Routine druckt Zeilenumbrüche und die zweite die Fibonacci-Berechnung und Ausgabe.

Das erste Unterprogramm beginnt in der ersten Zeile und bewegt sich die ganze Zeit von links nach rechts. Er gibt zuerst den Wert am Speicherzeiger aus (initialisiert auf Null) und erhöht dann den Wert am Speicherzeiger um 1. Nach dem No-Op springt die IP zur dritten Zeile, die zuerst in eine andere Speicherzelle wechselt und dann eine neue Zeile ausgibt. Da eine neue Zeile einen positiven Wert hat (ihr Wert ist 10), springt der Code immer zur nächsten fünften Zeile. Die fünfte Zeile gibt den Speicherzeiger auf unsere Fibonacci-Nummer zurück und wechselt dann zur anderen Subroutine. Wenn wir von dieser Subroutine zurückkehren, springt die IP nach der Ausführung eines No-Op in die dritte Zeile zurück.

Die zweite Unterroutine beginnt in der oberen rechten Ecke und bewegt sich nach Südosten. Nach einem No-Op werden wir auf die zweite Linie nach Westen geschickt. Diese Zeile gibt die aktuelle Fibonacci-Nummer aus, bevor der Speicherzeiger an die nächste Stelle bewegt wird. Dann springt die IP zur vierten Zeile, wo sie die nächste Fibonacci-Zahl unter Verwendung der vorherigen beiden berechnet. Dann gibt es die Kontrolle an die erste Subroutine zurück, aber wenn es die Kontrolle über das Programm wiedererlangt, fährt es fort, bis es auf einen Sprung trifft, wo es über den Spiegel springt, der ursprünglich verwendet wurde, um es nach Westen zu richten, während es zur zweiten Zeile zurückkehrt.


Vorläufige hübsche Bilder!

Die linke Seite des Bildes ist das Programm, die rechte Seite repräsentiert den Speicher. Das blaue Kästchen ist die erste IP, und beide IPs zeigen auf die nächste auszuführende Anweisung.

Bildbeschreibung hier eingeben

Hinweis: Bilder erscheinen möglicherweise nur für Personen mit ähnlich eingeschränkten Kenntnissen in Bildbearbeitungsprogrammen hübsch: PI fügt mindestens zwei weitere Iterationen hinzu, damit die Verwendung des *Operators klarer wird.

Anmerkung 2: Ich habe die Antwort von alephalpha erst gesehen , nachdem ich das meiste geschrieben hatte. Ich dachte, dass sie aufgrund der Trennung immer noch wertvoll ist, aber die tatsächlichen Fibonacci-Teile unserer Programme sind sehr ähnlich. Außerdem ist dies das kleinste Hexagony-Programm, bei dem mehr als eine IP-Adresse verwendet wurde

FryAmTheEggman
quelle
Sie sollten auf das verlinken, was Sie für die Erstellung der hübschen Bilder verwendet haben, und dann den Link auf esolangs.org/wiki/Hexagony setzen .
mbomb007
1
@ mbomb007 Ich habe gimp verwendet, um jeden Frame manuell zu erstellen, und dann die Bilder auf eine GIF-Website hochgeladen. Obwohl ich während dieses Prozesses mehrmals überlegt habe, ein Werkzeug dafür zu entwickeln, wenn man bedenkt, wie mühsam es war.
FryAmTheEggman
@FryAmTheEggman Beeindruckend! Mach es zu einer Herausforderung. Ich bin sicher, dass jemand eine Antwort posten wird. : D Noch besser, wenn Sie eine Website erstellen könnten, die dem Online-Interpreter von fish ähnelt.
mbomb007
@ mbomb007 Das könnte ein bisschen ehrgeizig für eine Herausforderung auf dieser Site sein, ganz zu schweigen davon, dass es wahrscheinlich viel darunter leidet, wirklich breit zu sein. Ich glaube nicht, dass ich das posten werde, aber Sie können es gerne selbst tun, wenn Sie glauben, dass Sie eine gute Möglichkeit haben, es zu präsentieren. Außerdem glaube ich, dass Timwi eine C # -Ide für Hexagony erstellt hat, obwohl ich sie nie verwendet habe, weil ich mich nicht mit Mono befasst habe.
FryAmTheEggman
1
@ mbomb007 Die ide wohnt hier übrigens vergessen es beim letzten mal zu verlinken.
FryAmTheEggman
18

COW , 108

 MoO moO MoO mOo MOO OOM MMM moO moO
 MMM mOo mOo moO MMM mOo MMM moO moO
 MOO MOo mOo MoO moO moo mOo mOo moo
Timtech
quelle
17

Python 2, 34 Bytes

Python mit Rekursion ... hier kommt ein StackOverflow!

def f(i,j):print i;f(j,i+j)
f(1,1)
jtjacques
quelle
15

Gelee , 3 Bytes

+¡1

Probieren Sie es online!

Wie es funktioniert

+¡1    Niladic link. No implicit input.
       Since the link doesn't start with a nilad, the argument 0 is used.

  1    Yield 1.
+      Add the left and right argument.
 ¡     For reasons‡, read a number n from STDIN.
       Repeatedly call the dyadic link +, updating the right argument with
       the value of the left one, and the left one with the return value.

¡ Sieh dir die beiden Links links an. Da es nur einen gibt, muss es der Körper der Schleife sein. Daher wird eine Zahl von der Eingabe gelesen. Da es keine Befehlszeilenargumente gibt, wird diese Nummer aus STDIN gelesen.

Dennis
quelle
12

Golfscript - Einzelnummer - 11.12.10

12 Zeichen für die Eingabe von stdin:

~0 1@{.@+}*;

11 Zeichen für die Eingabe bereits auf dem Stapel:

0 1@{.@+}*;

10 Zeichen zur weiteren Definition von 1 als 0. Fibonacci-Zahl:

1.@{.@+}*;
aaaaaaaaaaa
quelle
1
Die Option lautet "Berechnet mit n die n-te Fibonacci-Zahl". Also den Graben ~runter und du hast 11 Zeichen, die nden Stapel aufnehmen und F_nauf dem Stapel belassen.
Peter Taylor
12

Rubin

29 27 25 24 Zeichen

p a=b=1;loop{b=a+a=p(b)}

Bearbeiten: machte es eine Endlosschleife. ;)

st0le
quelle
13
Hat jemand bemerkt, dass b=a+a=bes sich um ein Palindrom handelt? :)
st0le
2
yes st0le did :)
gnibbler
Ich weiß, dass ich zu spät zur Party komme, aber kann mir jemand erklären, wie das b=a+a=bTeil funktioniert? Kann nicht scheinen, meinen Kopf darum zu wickeln.
Mr. Llama
3
@GigaWatt, Betrachten Sie es so, Anweisungen werden von links nach rechts ausgeführt ... sonewb=olda+(a=oldb)
st0le
Sie können 2 Zeichen sparen, indem Sie loopp 1,a=b=1;loop{p b=a+a=b}
Folgendes
11

Mathematica, 9 Zeichen

Fibonacci

Wenn integrierte Funktionen nicht zulässig sind, ist hier eine explizite Lösung:

Mathematica, 33 32 31 Zeichen

#&@@Nest[{+##,#}&@@#&,{0,1},#]&
Celtschk
quelle
#&@@Nest[{#+#2,#}&@@#&,{0,1},#]&32 Zeichen.
Chyanog
1
@chyanog 31:#&@@Nest[{+##,#}&@@#&,{0,1},#]&
Mr.Wizard
1
@ Mr.Wizard 24 Zeichen (26 Bytes):Round[GoldenRatio^#/√5]&
JungHwan Min
1
oder 23 Zeichen (27 Byte):Round[((1+√5)/2)^#/√5]&
JungHwan Min
10

DC (20 Byte)

Als Bonus ist es sogar verschleiert;)

zzr[dsb+lbrplax]dsax

EDIT: Ich kann darauf hinweisen, dass es alle Zahlen in der Fibonacci-Sequenz druckt , wenn Sie lange genug warten.

Hiato
quelle
13
Ich würde es nicht als verschleiert bezeichnen - verschleierter Code soll schwer zu verstehen sein, und was dc betrifft, ist der Code hier völlig unkompliziert.
Nabb
10

Vorspiel , 12 Bytes

Eine der wenigen Herausforderungen, bei denen Prelude tatsächlich ziemlich wettbewerbsfähig ist:

1(v!v)
  ^+^

Dies erfordert den Python-Interpreter, der Werte als Dezimalzahlen anstelle von Zeichen ausgibt.

Erläuterung

Im Prelude werden alle Zeilen parallel ausgeführt, wobei der Anweisungszeiger die Programmspalten durchläuft. Jede Zeile hat einen eigenen Stack, der auf Null initialisiert wird.

1(v!v)
  ^+^
| Push a 1 onto the first stack.
 | Start a loop from here to the closing ).
  | Copy the top value from the first stack to the second and vice-versa.
   | Print the value on the first stack, add the top two numbers on the second stack.
    | Copy the top value from the first stack to the second and vice-versa.

Die Schleife wird für immer wiederholt, da der erste Stapel niemals einen 0darüber hat.

Beachten Sie, dass dies die Fibonacci-Sequenz von startet 0.

Martin Ender
quelle
10

Sechseck , 6 Bytes

Nicht konkurrierend, weil die Sprache neuer ist als die Frage.

1.}=+!

Ungolfed:

  1 .
 } = +
  ! .

Es druckt die Fibonacci-Sequenz ohne Trennzeichen.

Alephalpha
quelle
2
Dies hat das kleinere Problem, dass kein Trennzeichen zwischen den Zahlen gedruckt wird. Dies ist jedoch in der Herausforderung nicht ganz genau festgelegt. (Und ich bin wirklich froh, dass jemand Hexagony verwendet. :))
Martin Ender
9

TI-BASIC, 11

Von dem legendären TI-BASIC-Golfer Kenneth Hammond ("Weregoose") von dieser Seite . Läuft in O (1) -Zeit und betrachtet 0 als den 0. Term der Fibonacci-Sequenz.

int(round(√(.8)cosh(Anssinh‾¹(.5

Benutzen:

2:int(round(√(.8)cosh(Anssinh‾¹(.5
                                     1

12:int(round(√(.8)cosh(Anssinh‾¹(.5
                                     144

Wie funktioniert das? Wenn Sie rechnen, stellt sich heraus, dass dies sinh‾¹(.5)gleich ist ln φ, sodass es sich um eine modifizierte Version der Binet-Formel handelt, die rundet, anstatt den (1/φ)^nKorrekturausdruck zu verwenden. Die round((auf 9 Dezimalstellen runden) wird benötigt, um Rundungsfehler zu vermeiden.

Thomas Kwa
quelle
8

K - 12

Berechnet die nund n-1Fibonacci-Zahl.

{x(|+\)/0 1}

Nur die nthFibonacci-Zahl.

{*x(|+\)/0 1}
isawdrones
quelle
+1 Nicht schlecht! Wenn Sie nur ein Zeichen verkleinern könnten (und mir eine Möglichkeit bieten, es zu testen), werde ich Ihre Antwort akzeptieren. :-)
Chris Jester-Young
Die einzige Möglichkeit zum Verkleinern besteht darin, die Funktion durch einen Anruf an eine bekannte Nummer zu ersetzen: n (| + \) / 0 1 Testen Sie sie mit diesem Interpreter .
Isawdrones
7

Julia, 18 Bytes

n->([1 1;1 0]^n)[]
Rɪᴋᴇʀ
quelle
7

Java, 55

Ich kann hier nicht mit der Prägnanz der meisten Sprachen mithalten, aber ich kann eine wesentlich andere und möglicherweise viel schnellere (konstante Zeit) Methode zur Berechnung der n-ten Zahl anbieten:

Math.floor(Math.pow((Math.sqrt(5)+1)/2,n)/Math.sqrt(5))

nist die Eingabe (int oder long), beginnend mit n = 1. Anstelle der Subtraktion werden Binets Formel und Runden verwendet.

Hans-Peter Störr
quelle
Ich liebe diese Lösung
Andreas
Das scheint bei mir nicht zu funktionieren, aber es ist früh und ich vermisse vielleicht etwas! Angenommen 0, es ist die erste Zahl in der Folge, ergibt dies 0, 0, 1, 1, 3, 4, 8, 12, 21, 33für die ersten 10 Zahlen
Shaggy
@ Shaggy Ups! Entschuldigung, ich habe jetzt einen Bugfix eingeführt.
Hans-Peter Störr
6

Rubin, 25 Zeichen

Die Antwort von st0le wurde gekürzt.

p 1,a=b=1;loop{p b=a+a=b}
Matma Rex
quelle
6
Tatsächlich können Sie es mita=b=1;loop{p a;b=a+a=b}
Ventero
6
Also stichst du auf seine Antwort? : P
mbomb007
6

FAC: Functional APL, 4 Zeichen (!!)

Nicht meins, daher als Community-Wiki gepostet. FAC ist ein Dialekt der APL, den Hai-Chen Tu offenbar 1985 als Dissertation vorgeschlagen hatte. Später schrieb er zusammen mit Alan J. Perlis einen Artikel mit dem Titel " FAC: A Functional APL Language ". Dieser Dialekt von APL verwendet "Lazy Arrays" und erlaubt Arrays von unendlicher Länge. Es definiert einen Operator "iter" ( ), um eine kompakte Definition einiger rekursiver Sequenzen zu ermöglichen.

Der monadische ("unäre") Fall von ist im Grunde Haskells iterateund wird definiert als (F⌼) A ≡ A, (F A), (F (F A)), …. Der dyadische ( „binary“) Fall definiert ist etwas analog für zwei Variablen: A (F⌼) B ≡ A, B, (A F B), (B F (A F B)), …. Warum ist das nützlich? Nun, wie sich herausstellt, ist dies genau die Art von Wiederholung, die die Fibonacci-Sequenz hat. In der Tat ist eines der Beispiele dafür

1+⌼1

Produzieren der vertrauten Sequenz 1 1 2 3 5 8 ….

Also, los geht's, wahrscheinlich die kürzestmögliche Fibonacci-Implementierung in einer nicht neuartigen Programmiersprache. : D

FireFly
quelle
Oh, ich habe Ihren Beitrag versehentlich als Teil meines (manuellen) Bulk-Unwikiings aus der Community entfernt. Naja. ;-)
Chris Jester-Young
6

R, 40 Bytes

Ich habe keine R-Lösung gesehen, also:

f=function(n)ifelse(n<3,1,f(n-1)+f(n-2))
Plannapus
quelle
1
Ich weiß, das ist eine alte Antwort, aber Sie können auf 38 Bytes
Robert S.
6

Dodos , 26 Bytes

	dot F
F
	F dip
	F dip dip

Probieren Sie es online!

Wie es funktioniert

Die Funktion F erledigt das ganze schwere Heben; es wird rekursiv wie folgt definiert.

F(n) = ( F(|n - 1|), F(||n - 1| - 1|) )

Immer wenn n> 1 ist , haben wir | n - 1 | = n - 1 <n und || n - 1 | - 1 | = | n - 1 - 1 | = n - 2 <n , daher gibt die Funktion (F (n - 1), F (n - 2)) zurück .

Wenn n = 0 ist , dann ist | n - 1 | = 1> 0 ; wenn n = 1 , dann || n - 1 | - 1 | = | 0 - 1 | = 1 = 1 . In beiden Fällen ruft die versuchten rekursive F (1) eine erhöhen Auslieferung Ausnahme, so F (0) liefert 0 und F (1) zurück 1 .

Zum Beispiel ist F (3) = (F (1), F (2)) = (1, F (0), F (1)) = (1, 0, 1) .

Schließlich ist die Hauptfunktion definiert als

main(n) = sum(F(n))

es addiert also alle Koordinaten des von F zurückgegebenen Vektors .

Zum Beispiel ist main (3) = sum (F (3)) = sum (1, 0, 1) = 2 .

Dennis
quelle
5

Desmos , 61 Bytes

Golf gespielt

Klicken Sie auf die add sliderSchaltfläche für n.

p=.5+.5\sqrt{5}
n=0
f=5^{-.5}\left(p^n-\left(-p\right)^{-n}\right)

Die letzte Zeile ist die Ausgabe.

Ungolfed

Ist eine Funktion.

\phi =\frac{1+\sqrt{5}}{2}
f_{ibonacci}\left(n\right)=\frac{\phi ^n-\left(-\phi \right)^{-n}}{\sqrt{5}}
Conor O'Brien
quelle
5

Cubix , 10 Bytes

Nicht konkurrierende Antwort, da die Sprache neuer ist als die Frage.

Cubix ist eine neue zweidimensionale Sprache von @ETHproductions, bei der der Code in einen Würfel mit passender Größe eingepackt wird.

;.o.ON/+!)

Probieren Sie es online aus

Dies wird auf die folgende Weise auf einen 2 × 2-Würfel gewickelt

    ; .
    o .
O N / + ! ) . .
. . . . . . . .
    . .
    . .
  • O gibt den Wert des TOS aus
  • N Schieben Sie den Zeilenvorschub auf den Stapel
  • / spiegeln Norden
  • o gibt den Charakter des TOS aus
  • ; Pop TOS
  • / reflektiere nach Osten, nachdem du den Würfel umrundet hast
  • + Addiere die oberen 2 Werte des Stapels
  • ! Überspringe den nächsten Befehl, wenn TOS 0 ist
  • ) Erhöhen Sie die TOS um 1. Dies startet die Sequenz im Wesentlichen.

Dies ist eine Endlosschleife, die die Sequenz mit einem Trennzeichen für Zeilenumbrüche druckt. Es wird die Tatsache ausgenutzt, dass die meisten Befehle die Werte nicht aus dem Stapel entfernen.
Wenn das Trennzeichen ignoriert wird, kann dies mit 5 Bytes erfolgen.O+!)

MickyT
quelle
5

Brainfuck, 16,15, 14/13 Zeichen

+[[->+>+<<]>]  

Erzeugt die Fibonacci-Sequenz und druckt nichts aus. Auch ist kürzer als die oben.

+[.[->+>+<<]>]   

Dieser hat 14 Zeichen, druckt jedoch ASCII-Zeichen mit den Werten der Fibonacci-Sequenz aus.

Stefnotch
quelle
1
Das ist gut, aber wäre es falsch zu sagen, dass die 14-Byte-Version erst ab der 2. 1 ausgibt? Wie in "1 2 3 5 8" anstelle von "1 1 2 3 5 8"?
Charlim
1
@Charlim Oh, du hast recht. Ich habe keine Ahnung, was ich von 2014 gedacht habe. Wie auch immer, ich habe es gerade behoben, indem ich die Druckanweisung an den Anfang der Schleife verschoben habe.
Stefnotch