A Fibonacci szekvencia olyan számsorozat, ahol minden szám a sorrendben az azt megelőző két szám összege. A sorozat első két száma mindkettő 1.

Íme az első néhány kifejezés

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

Írja be a legrövidebb kódot vagy:

  • Vége nélkül generálja a Fibonacci szekvenciát.

  • Adva n kiszámolja a szekvencia n harmadik tagját. (Vagy 1, vagy nulla indexelt)

Használhat szabványos bemeneti és kimeneti formákat.

(Mindkét lehetőséget megadtam arra az esetre, ha az egyik könnyebb a kiválasztott nyelven végezze, mint a másiké.)


A n függvényhez egy viszonylag nagy visszatérési értéket (a legnagyobb Fibonacci-számot) illeszkedik a számítógép normál szóméretéhez) támogatni kell.


Ranglista

 /* Configuration */ var QUESTION_ID = 85; // Obtain this from the url // It will be like https://XYZ.stackexchange.com/questions/QUESTION_ID/... on any question page var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 3; // This should be the user ID of the challenge author. /* App */ var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(";") + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = "<h1>" + c.body.replace(OVERRIDE_REG, "") + "</h1>"; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery("<a>"+lang+"</a>").text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang, user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw.toLowerCase() > b.lang_raw.toLowerCase()) return 1; if (a.lang_raw.toLowerCase() < b.lang_raw.toLowerCase()) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } } 
 body { text-align: left !important; display: block !important; } #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/codegolf/all.css?v=ffb5d0584c5f"> <div> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr> </thead> <tbody> </tbody> </table> </div> <div> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody> </tbody> </table> </div> <table style="display: none"> <tbody> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> 

Megjegyzések

  • Olyan választ várok, mint " f ", 1 bájt, matematikai alapú golf nyelvemen.

Válasz

Perl 6, 10 karakter:

Névtelen végtelen fibonacci szekvencia lista:

^2,*+*...* 

Ugyanaz, mint:

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

Tehát hozzárendelheti egy tömbhöz:

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

vagy

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

És kapja meg az első tizenegy értéket (0-tól 10-ig) a következővel:

say @short-fibs[^11]; 

vagy a következővel:

say @fibs[^11]; 

Várjon, az első 50 számot magából a névtelen listából is megszerezheti:

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

Ez visszaadja:

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 

És néhány egyszerű benchmark:

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

With:

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

EOF

megjegyzések

  • nem is gondolnám, hogy ' a ^2 helyettesítése a 0,1 helyett. +1
  • Ez már nem érvényes, |^2,*+*...* néven kell megírnod, ami ugyanannyi bájt, mint a 0,1,*+*...*.
  • A Perl olyan furcsa.
  • A Perl 6 melyik verziójába írták ezt a választ?
  • @CalculatorFeline Nagy változás történt GLR (Great List Refactor) néven ismert, ami nem sokkal az első hivatalos kiadás előtt történt, amely 2015-12-25 volt. Ez a kód addig működött volna.

Válasz

Brainfuck, 22 ütés

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

A Fibonacci-sorozatot generálja, amely fokozatosan halad át a memóriaszalagon.

Megjegyzések

  • gyönyörű ! Litterally gyönyörű! Vagy talán nem … egyébként +1 +1 erre 🙂
  • Ez 3,344 vagy 4 bájt tömörített agymenőben. (6 ln (22)) / ln (256)
  • 16 bájt: +[[<+>->+>+<<]>]
  • 14 bájt: +[.[>+>+<<-]>]
  • @Stefnotch természetesen a rövidebb romboló. A fenti megoldás a szalagon lévő fibonacci szekvenciával végződik, amit a 16 bájtos megoldás is megtesz.

Válasz

Haskell, 17 15 14 karakter

f=1:scanl(+)1f 

Próbálja ki online!

Megjegyzések

  • Miért ne vágna két szóközt f=0:scanl(+)1 f?
  • @Martinho: Szerkesztve, köszönöm.
  • Hú, ez ' még rövidebb, mint a szokásos f@(_:x)=0:1:zipWith(+)f x! Emlékeznie kell rá.
  • Akár egy másik szóközt is kitörölhet: f=0:scanl(+)1f.

Válasz

C # 4, 58 bájt

Adatfolyam (69; 65, ha gyengén gépel IEnumerable)

(using irányelv feltételezése a System.Collections.Generic.)

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

Egyetlen érték (58)

int F(uint n,int x=0,int y=1){return n<1?x:F(n-1,y,x+y);} 

Megjegyzések

  • Tekintve, hogy n egy uint, n==0 rövidíthető n<1 -re. A stream pedig megspórolhat néhány karaktert azáltal, hogy elhagyja a helyet a generikus típus után, és az x t a szükségesnél szélesebb körben deklarálja.Valójában az árok x teljes egészében: n+=c;c=n-c;
  • @Peter: Köszönöm, szerkeszteni fogok, ha lesz egy kis időm.
  • Az Ön egyetlen értékű verziója mindaddig érvényes, amíg a rekurzív lambda kifejezésem válaszol … szép!
  • @ wizzwizz4 ha ' nem tévedés, ha a !n működik, akkor csak n nek kell lennie, ha megfordítja a feltételeset. És itt arra gondoltam, hogy ' legyőztem Jon Skeet-t a C # … 🙂

válasz

GolfScript, 12

Most csak 12 karakter!

1.{[email protected]+.}do 

Megjegyzések

  • +1 szép munka. Ha 13 karakternél rövidebbre állítja, akkor ' azonnal elfogadom a válaszát (hacsak valaki még ennél sem rövidebb választ ad). 😛
  • Imádom a kihívást. Kész! 😉
  • Szép, nyersz. Legalábbis addig, amíg valaki még rövidebbet nem csinál (ha ez ' még lehetséges is). 😛
  • ez a meghatározás majdnem olyan rövid, mint maga a ' Fibonacci ' név! +1

Válasz

J, 10 karakter

A A Taylor-sorozat együtthatói talán kevéssé csalóak. Megtanulta itt .

 (%-.-*:)t. (%-.-*:)t. 0 1 2 3 4 5 10 100 0 1 1 2 3 5 55 354224848179261915075 

Megjegyzések

  • @aditsu (q:^-^:p) 6 64 729 ahol p egyenletes. J valószínűleg jó a mit csinál találós kérdésekre. 🙂
  • Még jobb: (<:^-^:>) 4 81 és <:^-^:> 4 a 53.5982.
  • Az itt bemutatott emoji az, amire az összes J kódnak törekednie kell. Megjegyzendő, hogy egy másik alternatíva a +/@:!&i.- 9 bájt használata.
  • @miles Nagyon szép! Tegye közzé, mivel teljesen eltér az enyémtől.

Válasz

> < > – 15 karakter

0:nao1v a+@:n:<o 

Megjegyzések

  • Bár rövidítheti a következőre: 0:nao1v LF a+@:n:<o ha akarod. 15-et ad 🙂 Valójában ez a kimenetet is kissé olvashatóbbá teszi …
  • 13 karakter: 01r:nao$:@+$r

Válasz

Hexagonia , 18 14 12

Köszönet Martinnak 6 bájtért!

1="/}.!+/M8; 

Kiterjesztett:

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

Próbálja ki online


Régi, válaszoljon. Ez azért maradt, mert a képek és a magyarázat hasznos lehet az új Hexagony-felhasználók számára.

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

Kiterjesztett:

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

Ez kinyomtatja a Fibonacci-sorrendet új vonalakkal elválasztva.

Próbálja ki online! Legyen óvatos, bár az online az értelmező nem igazán szereti a végtelen kimenetet.

Magyarázat

Két “szubrutin” van ennek a programnak, mindegyiket a két felhasznált IP futtatja. Az első rutin új sorokat nyomtat. , a második pedig elvégzi a Fibonacci kiszámítását és kimenetét.

Az első alprogram az első sorból indul, és egész idő alatt balról jobbra mozog. Először kinyomtatja az értéket a memóriamutatón (nullára inicializálva), majd növeli a memória mutatójának értékét 1 értékkel. A nem-opció után az IP a harmadik sorra ugrik, amely először átvált egy másik memória cellára, majd új sort nyomtat. egy újsornak pozitív értéke van (értéke 10), th Az e kód mindig az ötödik sorra ugrik. Az ötödik sor visszaadja a memória mutatóját a Fibonacci számunkra, majd átvált a másik alprogramra. Amikor visszatérünk erről az alprogramról, az IP visszaáll a harmadik sorba, miután végrehajtotta az opciót.

A második alprogram a jobb felső sarokban kezdődik és délkelet felé indul. Nem engedélyezés után ugrálunk, hogy a második vonalon nyugat felé haladjunk. Ez a sor kinyomtatja az aktuális Fibonacci számot, mielőtt áthelyezné a memória mutatót a következő helyre. Ezután az IP a negyedik sorra ugrik, ahol az előző kettő felhasználásával kiszámítja a következő Fibonacci számot. Ezután visszaadja az irányítást az első alprogramnak, de amikor visszanyeri az irányítást a program felett, addig folytatja, amíg meg nem felel egy ugrásnak, ahol az eredetileg nyugat felé irányított tükör fölé pattan, miközben visszatér a második vonalra.


Előzetes szép képek!

A kép bal oldala a program, a jobb oldala a memóriát jelenti. A kék négyzet az első IP, és mindkét IP a következő végrehajtandó utasításra mutat.

ide írja be a kép leírását

Megjegyzés: A képek csak azok számára tűnik csinosnak, akik hasonlóan korlátozott képzettséggel rendelkeznek a képszerkesztő programokkal: a PI hozzáad még legalább 2 iterációt, hogy az * operátor használata világosabbá váljon.

2. megjegyzés: A alephalpha válaszát csak a legtöbb írás után láttam, arra gondoltam, hogy a szétválasztás miatt még mindig értékes, de a tényleges Fibonacci A programjaink részei nagyon hasonlóak. Ezenkívül ez a legkisebb Hexagony program, amelyet több IP-n is használtam, ezért úgy gondoltam, hogy jó lenne megtartani: P

Hozzászólások

  • Linkelned kell bármit, amit a csinos képek elkészítéséhez használtál, majd tedd a linket az esolangs.org/wiki/ címre. Hexagony .
  • @ mbomb007 A gimp segítségével készítettem minden egyes keretet manuálisan, majd feltöltöttem a képeket néhány gi-be f weboldal készítése. Bár a folyamat során többször fontolóra vettem egy eszköz készítését, figyelembe véve, hogy milyen unalmas volt.
  • @FryAmTheEggman Lenyűgöző! Tedd kihívássá. ' Biztos vagyok benne, hogy valaki küld választ. : D Még jobb, ha létrehozhat egy olyan weboldalt, amely hasonló a halak ' s online tolmácsához.
  • @ mbomb007 Ez meglehetősen ambiciózus lehet egy kihívásnak ezen a webhelyen , arról nem is beszélve, hogy valószínűleg nagyon sokat szenvedne attól, ha valóban széles lenne. Nem ' nem hiszem, hogy ezt közzétenném, de nyugodtan tedd meg te is, ha úgy gondolod, hogy jó módja van a bemutatásra. Emellett úgy gondolom, hogy Timwi létrehozott egy C # ideát a hatszögűséghez, bár én ' még soha nem használtam, mert nem gondoltam div divóniával.
  • @ mbomb007 Az ide itt él , mellesleg utoljára elfelejtette összekapcsolni.

Válasz

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 

Válasz

Python 2, 34 bájt

Python, rekurzióval … itt StackOverflow jön!

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

Válasz

Zselé , 3 bájt

+¡1 

Próbálja ki online!

Hogyan működik

+¡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. 

¡ bekukucskál a bal oldali két linkre. Mivel csak egy van, a hurok testének kell lennie. Ezért egy szám beolvasásból származik. Mivel nincsenek parancssori argumentumok, ez a szám az STDIN-ből olvasható le.

Válasz

Hexagony , 6 bájt

Nem versenyez, mert a nyelv újabb, mint a kérdés.

1.}=+! 

Ungolfed:

 1 . } = + ! . 

A Fibonacci szekvenciát elválasztó nélkül nyomtatja ki.

Megjegyzések

  • Ennek az a kisebb problémája van, hogy nem ' nem nyomtat elválasztót a számok közé. Ez még nem teljesen meg van határozva a kihívásban, de '. (És én ' nagyon boldog vagyok, ha valaki Hexagony-t használ. :))

Válasz

Golfscript – egyetlen szám – 10/12/10

12 karakter a stdin bevitelének átvételéhez:

~0 1@{.@+}*; 

11 karakter a veremben lévő bemenethez:

0 1@{.@+}*; 

10 karakter az 1 tovább definiálására 0. Fibonacci számként:

1.@{.@+}*; 

megjegyzések

  • Az opció a következő: " Kiszámítja n-re az n-edik Fibonacci-számot ". Tehát árassza el a ~ -et, és 11 karaktere van, amelyek n -t vesznek fel a veremre, és otthagyják az F_n a veremen.

Válasz

Ruby

29 27 25 24 karakterek

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

Szerkesztés: végtelen ciklussá tette. 😉

Megjegyzések

  • észrevette valaki, hogy b=a+a=b egy palindrom? 🙂
  • igen st0le igen 🙂
  • Tudom, hogy ' későn érkeztem a buliba, de tudná valaki megmagyarázni, hogy a b=a+a=b rész működik? Úgy tűnik, hogy ' nem tudja a fejem köré fonni.
  • @GigaWatt, gondold át így, az utasításokat balról jobbra hajtják végre …tehát newb=olda+(a=oldb)
  • 2 karaktert elmenthet a loop használatával: p 1,a=b=1;loop{p b=a+a=b}

Válasz

DC (20 bájt)

Bónuszként: “még homályosak is;)

zzr[dsb+lbrplax]dsax 

SZERKESZTÉS: Felhívhatom a figyelmet, hogy az összes számot kiírja a fibonacci szekvencia, ha elég sokáig vársz.

Megjegyzések

  • Nem nevezném el ' nem nevezném elfödöttnek – elfödött kódnak állítólag nehezen érthető, és amennyire a dc megy, a kód itt teljesen egyértelmű.

Válasz

Mathematica, 9 karakter

Fibonacci 

Ha a beépített függvények nem engedélyezettek, itt egy kifejezett megoldás:

Mathematica, 33 32 31 karakter

#&@@Nest[{+##,#}&@@#&,{0,1},#]& 

Megjegyzések

  • #&@@Nest[{#+#2,#}&@@#&,{0,1},#]& 32 karakter.
  • @chyanog 31: #&@@Nest[{+##,#}&@@#&,{0,1},#]&
  • @ Mr.Wizard 24 karakter (26 bájt): Round[GoldenRatio^#/√5]&
  • vagy 23 karakter (27 bájt): Round[((1+√5)/2)^#/√5]&

Válasz

Prelude , 12 bájt

Azon kevés kihívások egyike, ahol a Prelude valóban meglehetősen versenyképes:

1(v!v) ^+^ 

Ehhez a Python tolmácsra van szükség, amely karakterek helyett decimális számként nyomtatja ki az értékeket.

Magyarázat

Az Előzményben az összes sort párhuzamosan hajtják végre, az utasításmutató áthalad a program oszlopain. Minden sornak megvan a maga vereme, amelyet nullára inicializálunk.

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. 

A hurok örökké megismétlődik, mert az első veremnek soha nem lesz felül 0.

Ne feledje, hogy ezzel a Fibonacci szekvencia 0 -ből indul.

Válasz

TI-BASIC, 11

A legendás TI-BASIC golfozó, Kenneth Hammond (“Weregoose”), erről az oldalról . O (1) időben fut, és a 0-t tartja a Fibonacci-sorozat 0. tagjának.

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

Használat:

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

Hogyan működik ez? Ha elvégzi a matematikát, kiderül, hogy a sinh‾¹(.5) egyenlő a ln φ -vel, tehát a Binet képletének módosított változata lefelé kerekít a (1/φ)^n javítási kifejezés használata helyett. A kerekítési hibák elkerülése érdekében a round( (kerekítés 9 tizedesjegyig) szükséges.

Válasz

K – 12

Kiszámítja a n és a n-1 Fibonacci számot.

{x(|+\)/0 1} 

Csak a nth Fibonacci szám.

{*x(|+\)/0 1} 

Megjegyzések

  • +1 Nem rossz! Ha csak egy karaktert tudna összehúzni (és módot adna a tesztelésre), akkor ' elfogadom a válaszát. 🙂
  • A zsugorítás egyetlen módja az lenne, ha a függvényt lecserélnénk egy ismert szám hívására: n (| + \ ) / 0 1 Teszteld ezzel az értelmezővel .

Válasz

Java, 55

Itt nem tudok versenyezni a legtöbb nyelv tömörségével, de az n-edik szám kiszámításához lényegesen eltérő és valószínűleg sokkal gyorsabb (konstans idejű) módszert tudok ajánlani:

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

n a bemenet (int vagy hosszú), kezdve n = 1-vel. Binet képlete és a kivonás helyett kerekít.

Megjegyzések

  • imádom ez a megoldás
  • Ez úgy tűnik, hogy ' nem működik nálam, de ' korán, és lehet, hogy hiányzik valami! Feltételezve, hogy a 0 az első szám a sorozatban, ez a 0, 0, 1, 1, 3, 4, 8, 12, 21, 33 -t adja a fenyőknek t 10 szám
  • @Shaggy Hoppá! Bocsánat, bemutattam egy hibát – javítva.

Válasz

Júlia, 18 bájt

n->([1 1;1 0]^n)[] 

Válasz

Dodos , 26 bájt

	dot F F 	F dip 	F dip dip 

Próbálja ki online!

Működése

Az F függvény minden nehéz feladatot elvégez; rekurzív módon a következőképpen definiáljuk.

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

Amikor n> 1 | n – 1 | = n – 1 < n és || n – 1 | – 1 | = | n – 1 – 1 | = n – 2 < n , így a függvény visszaadja az (F (n – 1), F (n – 2)) .

Ha n = 0 , majd | n – 1 | = 1> 0 ; ha n = 1 , akkor || n – 1 | – 1 | = | 0 – 1 | = 1 = 1 . Mindkét esetben a megkísérelt rekurzív hívások F (1) átadás kivételt vetnek fel, így F (0) visszaadja 0 és F (1) visszaadja 1 .

Például: F (3) = (F (1), F (2)) = (1 , F (0), F (1)) = (1, 0, 1) .

Végül a main függvény meghatározása

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

, így összeadja a visszaadott vektor összes koordinátáját írta: F .

Például: main (3) = összeg (F (3)) = összeg (1, 0, 1) = 2 .

Megjegyzések

  • elolvastam a README-t (DODOS), és nagyon érdekes vagyok; ez egy nagyon ügyes koncepció! De nem találom sem az Esolangs-on, sem máshol. Kitaláltál?

Válasz

Rubin, 25 karakter

st0le “a válaszok lerövidültek.

p 1,a=b=1;loop{p b=a+a=b} 

Megjegyzések

  • Valójában a a=b=1;loop{p a;b=a+a=b}
  • Tehát elbírálja a válaszát?: P

Válasz

FAC: Funkcionális APL, 4 karakter (!!)

Nem az enyém, ezért közösségi wikiként jelenik meg. A FAC az APL dialektusa, amelyet Hai-Chen Tu láthatóan PhD disszertációként javasolt Később Alan J. Perlis-szel írt egy cikket “ FAC: Funkcionális APL nyelv ” címmel. Az APL ezen dialektusa “lusta tömböket” és Végtelen hosszúságú tömbök engedélyezése. Meghatározza az “iter” () operátort, hogy lehetővé tegye egyes rekurzív szekvenciák kompakt meghatározását.

A monádos (“unáris” A (z) esete alapvetően Haskell “s , és meghatározása a következő: (F⌼) A ≡ A, (F A), (F (F A)), …. A diadikus (“bináris”) esetet némileg analóg módon definiálják két változó esetében: A (F⌼) B ≡ A, B, (A F B), (B F (A F B)), …. Miért hasznos ez? Nos, mint kiderült, pontosan ez a fajta visszatérés a Fibonacci-szekvenciánál. Valójában az egyik ilyen példa

1+⌼1 

az ismert szekvencia előállítása 1 1 2 3 5 8 ….

Szóval, tessék, valószínűleg a lehető legrövidebb Fibonacci megvalósítás egy nem újszerű programozási nyelven. : D

Hozzászólások

  • Ó, véletlenül eltávolítottam a bejegyzést a közösségtől (a kézi) tömeges eltávolítás részeként. Nos, hát. 😉

Válasz

R, 40 bájt

Haven nem látott R megoldás, tehát:

f=function(n)ifelse(n<3,1,f(n-1)+f(n-2)) 

megjegyzések

  • Tudom, hogy ez egy régi válasz, de te rövidíteni 38 bájtra

Válasz

05AB1E, 7 bájt

Kód:

1$<FDr+ 

Próbálja ki online!

Megjegyzések

  • Sziasztok, üdvözlünk a PPCG-n! Szép első hozzászólás!

Válasz

GolfScript, 13 karakter

2,~{..p@+.}do 

(Válaszom egy előző Verem túlcsordulás kérdés .)

Válasz

Desmos , 61 bájt

Golfozott

Kattintson a add slider gomb n számára.

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

Az utolsó sor a kimenet.

Ungolfed

Funkció.

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

Válasz

Kocka , 10 bájt

Nem versengő válasz, mert a nyelv újabb, mint a kérdés.

A Cubix egy új, kétdimenziós nyelv, amelyet a @ETHproductions írt, ha a kódot egy megfelelő méretű kockára tekerték.

;.o.ON/+!) 

Próbálja ki online

Ez egy 2 x 2 kocka a következő módon

 ; . o . O N / + ! ) . . . . . . . . . . . . . . 
  • O adja ki a TOS értékét
  • N tolja az új sort a verembe
  • / északra tükröződik
  • o adja ki a TOS karakterét
  • ; pop TOS
  • / keletre reflektálnak a kocka megkerülése után
  • + adják hozzá a verem legfelső 2 értékét
  • ! hagyja ki a következő parancsot, ha a TOS 0.
  • ) 1-gyel növeli a TOS-ot. Ez lényegében elindítja a szekvenciát. >

Ez egy végtelen hurok, amely új sor elválasztóval nyomtatja ki a sorrendet. Kihasználja azt a tényt, hogy a legtöbb parancs nem adja ki az értékeket a veremből.
Ha az elválasztót figyelmen kívül hagyják, ez 5 bájttal .O+!)

Válasz

Brainfuck, 16,15, 14/13 karakter

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

Létrehozza a Fibonacci szekvenciát, és nem nyomtat ki semmit. Rövidebb, mint a fenti.

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

Ez az egyik 14 karakterből áll, de az ASCII karaktereket kinyomtatja a Fibonacci sorozat értékeivel.

Megjegyzések

  • Ez jó, de tévednék mondván, hogy a 14 bájtos verzió csak a 2. 1-ből származik? Mint " 1 2 3 5 8 " a " 1 1 2 3 5 8 "?
  • @Charlim Ó, te ' igaza van. Fogalmam sincs, mit gondolt a 2014-es én. Egyébként csak javítottam a mov segítségével a nyomtatási utasítás eljuttatása a hurok elejére.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük