Fibonacci-sekvenssi - selitetty Pythonissa, JavaScriptissä, C ++: ssa, Java: ssa ja Swiftissä

Fibonacci-sekvenssi on määritelmän mukaan kokonaislukusekvenssi, jossa jokainen numero kahden ensimmäisen jälkeen on kahden edellisen luvun summa. Yksinkertaistamiseksi:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,…

Sillä on monia sovelluksia matematiikassa ja jopa kaupankäynnissä (kyllä, luit sen oikein: kaupankäynti), mutta tämä ei ole tämän artikkelin tarkoitus. Tavoitteenani on tänään näyttää, kuinka voit laskea tämän numerosarjan minkä tahansa termin viidellä eri ohjelmointikielellä rekursiivisten toimintojen avulla.

Rekursiiviset toiminnot ovat niitä toimintoja, jotka periaatteessa kutsuvat itseään.

Haluan huomata, että tämä ei ole paras tapa tehdä se - itse asiassa sitä voidaan pitää perustavimpana menetelmänä tähän tarkoitukseen. Tämä johtuu siitä, että sarjan suurempien ehtojen laskemiseen tarvittava laskentateho on valtava. Funktion kutsumiskertojen määrä aiheuttaa pinon ylivuotoa useimmilla kielillä.

Kaiken kaikkiaan aloitetaan tämän opetusohjelman tarkoituksia varten.

Ensinnäkin, mietitään, miltä koodi näyttää. Se sisältää:

· Rekursiivinen funktio F (F Fibonaccille): seuraavan lauseen arvon laskemiseksi.

· Ei muuta: Varoitin, että se oli melko yksinkertainen.

Meidän toiminto kestää n tulona, joka viittaa n : nnen aikavälin sekvenssin että haluamme laskea. Joten F (4): n tulisi palauttaa sekvenssin neljäs termi.

Suunnittelemme sen. Koodin tulisi kielestä riippumatta näyttää tältä:

function F(n)  if n = 0

   return 0  if n = 1

   return 1  else

   return F(n-1) + F(n-2)

Huomaa: sekvenssin termi 0 katsotaan 0: ksi, joten ensimmäinen termi on 1; toinen, 1; kolmas, 2; ja niin edelleen. Saat sen.

Analysoidaan funktio hetkeksi. Jos se saa 0 tulona, ​​se palauttaa 0. Jos se saa 1, se palauttaa 1. Jos se saa 2 ... No, siinä tapauksessa se kuuluu toiseen lauseeseen, joka kutsuu funktiota uudelleen termeille 2–1 ( 1) ja 2–2 (0). Se palauttaa arvon 1 ja 0, ja nämä kaksi tulosta lisätään, jolloin tulokseksi saadaan 1. Täydellinen.

Nyt voit nähdä, miksi rekursiiviset toiminnot ovat ongelma joissakin tapauksissa. Kuvittele, että halusit jakson 100. jakson. Funktio kutsuisi itseään 99. ja 98. numeroksi, jotka itse kutsuvat funktiota uudelleen 98. ja 97., 97. ja 96. termiksi… ja niin edelleen. Se olisi todella hidasta.

Mutta hyvä uutinen on, että se todella toimii!

Joten aloitetaan eri kielillä. En anna liikaa yksityiskohtia (oikeastaan, ei mitään yksityiskohtia), jotta lukukokemus paranisi. Ei ole liikaa yksityiskohtia joka tapauksessa.

Hypätään siihen:

Python

def F(n):  if n == 0:

   return 0  if n == 1:

   return 1  else:

   return F(n-1) + F(n-2)

Nopea

func F(_ n: Int) -> Int {  if n == 0 {    return 0

 }  if n == 1 {    return 1

 }  else {    return F(n-1) + F(n-2)

 }}

JavaScript

function F(n) {  if(n == 0) {    return 0;

 }  if(n == 1) {    return 1;

 }  else {    return F(n-1) + F(n-2);

 }}

Java

public static int F(int n) {  if(n == 0) {    return 0;

 }  if(n == 1) {    return 1;

 }  else {    return F(n-1) + F(n-2);

 }}

C ++

int F(int n) {  if(n == 0) {    return 0;

 }  if(n == 1) {    return 1;

 }  else {    return F(n-1) + F(n-2);

 }}

Ja siinä se. Valitsin nämä kielet vain suosion perusteella - tai ainakin siksi, että nämä 5 ovat yleisimpiä käyttämiäni kieliä. Ne eivät ole tietyssä järjestyksessä. Ne voitaisiin luokitella syntaksin vaikeuksien mukaan, Pythonista (helpoin) C ++: een (vaikein). Mutta se riippuu henkilökohtaisesta mielipiteestäsi ja kokemuksestasi jokaisella kielellä.

Toivottavasti pidit tästä artikkelista, ja jos sinulla on kysyttävää / suosituksia tai haluat vain sanoa hei, kommentoi alla!