Fibonacci järjestus - selgitatud Pythonis, JavaScripti, C ++, Java ja Swiftis

Fibonacci jada on definitsiooni järgi täisarvuline järjestus, milles iga kahe esimese numbri järel on kahe eelneva arvu summa. Lihtsustamiseks tehke järgmist.

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

Sellel on palju rakendusi matemaatikas ja isegi kauplemises (jah, lugesite seda õigust: kauplemine), kuid see pole selle artikli mõte. Minu eesmärk on täna näidata teile, kuidas saate selle arvusarja mis tahes termini arvutada viies erinevas programmeerimiskeeles, kasutades rekursiivseid funktsioone.

Rekursiivsed funktsioonid on need funktsioonid, mida põhimõtteliselt nimetatakse iseendaks.

Tahan märkida, et see pole parim viis selle tegemiseks - tegelikult võiks seda pidada sel eesmärgil kõige põhilisemaks meetodiks. Seda seetõttu, et seeria suuremate tingimuste arvutamiseks vajalik arvutusvõimsus on tohutu. Funktsiooni kutsumiste arv põhjustab enamikus keeltes virna ülevoolu.

Alustame sellest õpetusest lähtudes.

Kõigepealt mõelgem sellele, kuidas kood välja näeb. See sisaldab järgmist:

· Rekursiivne funktsioon F (F - Fibonacci): järgmise termini väärtuse arvutamiseks.

· Ei midagi muud: hoiatasin teid, et see on üsna elementaarne.

Meie funktsioon võtab sisendina n , mis viitab järjestuse n- ndale terminile, mida soovime arvutada. Niisiis peaks F (4) tagastama jada neljanda termini.

Plaanime selle. Kood peaks olenemata keelest välja nägema umbes selline:

function F(n)  if n = 0

   return 0  if n = 1

   return 1  else

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

Märkus: jada mõistet 0 loetakse 0-ks, seega esimene termin on 1; teine, 1; kolmas, 2; ja nii edasi. Sa saad aru.

Analüüsime hetkeks funktsiooni. Kui see saab sisendina 0, tagastab ta 0. Kui saab 1, tagastab 1. Kui see saab 2 ... Noh, sellisel juhul satub see lause lause else, mis kutsub funktsiooni uuesti tingimustele 2–1 ( 1) ja 2–2 (0). See annab tulemuseks 1 ja 0 ning kaks tulemust lisatakse, tagastades 1. Täiuslik.

Nüüd näete, miks rekursiivsed funktsioonid on mõnel juhul probleemiks. Kujutage ette, et soovite järjestuse 100. tähtaega. Funktsioon nimetaks end 99. ja 98. numbriks, mis ise nimetaksid funktsiooni uuesti 98. ja 97. ning 97. ja 96. terminiks ... ja nii edasi. See oleks tõesti aeglane.

Kuid hea uudis on see, et see tegelikult töötab!

Alustame siis erinevatest keeltest. Ma ei anna liiga palju üksikasju (tegelikult pole üldse detaile), et teie lugemiselamust paremaks muuta. Igatahes pole liiga palju üksikasju.

Hüppame sellesse:

Python

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

   return 0  if n == 1:

   return 1  else:

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

Kiire

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

 }  if n == 1 {    return 1

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

 }}

JavaScripti

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 see ongi kõik. Valisin need keeled lihtsalt populaarsuse põhjal - või vähemalt sellepärast, et need 5 on kõige levinumad keeled, mida ma kasutan. Need pole kindlas järjekorras. Neid võiks liigitada süntaksiraskuste järgi minu arvates Pythonist (kõige lihtsam) kuni C ++ (kõige raskem). Kuid see sõltub teie isiklikust arvamusest ja kogemustest iga keelega.

Loodan, et see artikkel meeldis teile ja kui teil on küsimusi / soovitusi või soovite lihtsalt tere öelda, kommenteerige allpool!