„Fibonacci“ seka - paaiškinta „Python“, „JavaScript“, „C ++“, „Java“ ir „Swift“

„Fibonači“ seka pagal apibrėžimą yra sveika skaičių seka, kurioje kiekvienas skaičius po pirmųjų dviejų yra dviejų ankstesnių skaičių suma. Norėdami supaprastinti:

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

Jame yra daugybė matematikos ir netgi prekybos sričių (taip, jūs teisingai perskaitėte: prekyba), tačiau tai nėra šio straipsnio esmė. Mano tikslas šiandien parodyti, kaip galite apskaičiuoti bet kurį šios skaičių serijos terminą penkiomis skirtingomis programavimo kalbomis, naudodami rekursines funkcijas.

Rekursinės funkcijos yra tos funkcijos, kurios iš esmės vadina save.

Noriu pažymėti, kad tai nėra geriausias būdas tai padaryti - iš tikrųjų tai galėtų būti laikoma pagrindiniu šiam tikslui. Taip yra todėl, kad skaičiavimo galia, reikalinga norint apskaičiuoti didesnius serijos terminus, yra didžiulė. Funkcijos iškvietimų skaičius daugumoje kalbų sukelia kamino perpildymą.

Visų pirma, šios pamokos tikslais pradėkime.

Pirmiausia pagalvokime, kaip atrodys kodas. Tai apims:

· Rekursinė funkcija F (F - „Fibonacci“): apskaičiuojama kito termino vertė.

· Nieko kito: perspėjau, kad tai gana elementaru.

Mūsų funkcija ims n kaip įvestį, kuri nurodys n -ąjį sekos, kurią norime apskaičiuoti, terminą. Taigi, F (4) turėtų grąžinti ketvirtąjį sekos terminą.

Suplanuokime. Nepaisant kalbos, kodas turėtų atrodyti maždaug taip:

function F(n)  if n = 0

   return 0  if n = 1

   return 1  else

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

Pastaba: sekos terminas 0 bus laikomas 0, taigi pirmasis terminas bus 1; antrasis - 1; trečiasis - 2; ir taip toliau. Jūs suprantate.

Trumpam išanalizuokime funkciją. Jei įvestis gauna 0, ji grąžina 0. Jei gauna 1, ji grąžina 1. Jei gauna 2 ... Na, tokiu atveju jis patenka į kitą sakinį, kuris dar kartą iškvies funkciją 2–1 ( 1) ir 2–2 (0). Tai grąžins 1 ir 0, o du rezultatai bus pridėti, grąžinant 1. Puikiai.

Dabar galite pamatyti, kodėl rekursinės funkcijos yra problema kai kuriais atvejais. Įsivaizduokite, kad norite 100-osios sekos kadencijos. Funkcija vadintųsi 99-ąja ir 98-ąja, kurios pačios vėl vadintų funkciją 98-ąja ir 97-ąja, 97-ąja ir 96-ąja terminais ... ir pan. Tai būtų tikrai lėta.

Tačiau gera žinia ta, kad tai iš tikrųjų veikia!

Taigi pradėkime nuo skirtingų kalbų. Aš nepateiksiu per daug detalių (iš tikrųjų, be jokių detalių), kad jūsų skaitymo patirtis būtų geresnė. Šiaip nėra per daug detalizuota.

Peršokime į jį:

„Python“

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

   return 0  if n == 1:

   return 1  else:

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

Greitas

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);

 }}

Štai ir viskas. Šias kalbas pasirinkau tik atsižvelgdama į populiarumą - arba bent jau todėl, kad dažniausiai vartoju šias 5 kalbas. Jie nėra jokia ypatinga tvarka. Jie galėtų būti klasifikuojami pagal sintaksės sunkumus, mano nuomone, nuo „Python“ (lengviausia) iki „C ++“ (sunkiausia). Bet tai priklauso nuo jūsų asmeninės nuomonės ir kiekvienos kalbos patirties.

Tikiuosi, kad šis straipsnis jums patiko ir, jei turite klausimų / rekomendacijų ar tiesiog norite pasisveikinti, pakomentuokite žemiau!