de Pau Pavón

Secvența Fibonacci este, prin definiție, secvența întreagă în care fiecare număr după primele două este suma celor două numere precedente. A simplifica:

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

Are multe aplicații în matematică și chiar în tranzacționare (da, ați citit bine: tranzacționare), dar nu acesta este scopul acestui articol. Scopul meu de astăzi este să vă arăt cum puteți calcula orice termen al acestei serii de numere în cinci limbaje de programare diferite folosind funcții recursive.

Funcțiile recursive sunt acele funcții care, în principiu, se numesc.

Vreau să menționez că aceasta nu este cea mai bună metodă pentru ao face – de fapt, ar putea fi considerată cea mai de bază metodă în acest scop. Acest lucru se datorează faptului că puterea de calcul necesară pentru a calcula termeni mai mari ai seriei este imensă. De câte ori funcția este numită provoacă o revărsare a stivei în majoritatea limbilor.

Totuși, în sensul acestui tutorial, să începem.

În primul rând, să ne gândim cum va arăta codul. Acesta va include:

· O funcție recursivă F (F pentru Fibonacci): pentru a calcula valoarea termenului următor.

· Nimic altceva: v-am avertizat că este destul de simplu.

Funcția noastră va lua n ca intrare, care se va referi la nal treilea termen al secvenței pe care dorim să o calculăm. Deci, F (4) ar trebui să returneze al patrulea termen al secvenței.

Să o planificăm. Codul ar trebui, indiferent de limbă, să arate cam așa:

function F(n)  if n = 0
   return 0  if n = 1
   return 1  else
   return F(n-1) + F(n-2)

Notă: termenul 0 al secvenței va fi considerat a fi 0, deci primul termen va fi 1; al doilea, 1; al treilea, 2; și așa mai departe. Ai înțeles.

Să analizăm funcția pentru o clipă. Dacă primește 0 ca intrare, returnează 0. Dacă primește 1, returnează 1. Dacă primește 2 … Ei bine, în acest caz se încadrează în instrucțiunea else, care va apela funcția din nou pentru termenii 2-1 ( 1) și 2-2 (0). Aceasta va reveni la 1 și 0, iar cele două rezultate vor fi adăugate, returnând 1. Perfect.

Acum puteți vedea de ce funcțiile recursive reprezintă o problemă în unele cazuri. Imaginați-vă că ați dorit al 100-lea termen al secvenței. Funcția s-ar numi singură pentru a 99-a și a 98-a, care vor numi ele însele funcția din nou pentru 98 și 97 și 97 și 96 … și așa mai departe. Ar fi într-adevăr încet.

Dar vestea bună este că funcționează de fapt!

Deci, să începem cu diferitele limbi. Nu voi da prea multe detalii (de fapt, niciun detaliu deloc) pentru a vă îmbunătăți experiența de lectură. Nu există prea multe detalii oricum.

Să trecem în el:

Piton

def F(n):  if n == 0:
   return 0  if n == 1:
   return 1  else:
   return F(n-1) + F(n-2)

Rapid

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

Si asta e. Am ales aceste limbi doar pe baza popularității – sau cel puțin pentru că aceste 5 sunt cele mai frecvente pe care le folosesc. Nu sunt într-o ordine specială. Pot fi clasificate după dificultăți de sintaxă, după părerea mea, de la Python (cel mai ușor) la C ++ (cel mai greu). Dar asta depinde de părerea ta personală și de experiența ta cu fiecare limbă.

Sper că v-a plăcut acest articol și, dacă aveți întrebări / recomandări sau doriți doar să salutați, comentați mai jos!