Articles

JavaScript rekursiivinen funktio

yhteenveto: tässä opetusohjelmassa opit käyttämään rekursiotekniikkaa JavaScript-rekursiivisen funktion kehittämiseen, joka on funktio, joka kutsuu itseään.

Johdatus JavaScriptin rekursiivisiin funktioihin

rekursiivinen funktio on funktio, joka kutsuu itseään kunnes se ei toimi. ja tätä tekniikkaa kutsutaan rekursioksi.

Oletetaan, että sinulla on funktio recurse()recurse() on rekursiivinen funktio, jos se kutsuu itseään kehonsa sisällä näin:

function recurse() { // ... recurse(); // ...}
Code language: JavaScript (javascript)

rekursiivisella funktiolla on aina ehto lopettaa itsensä kutsuminen, muuten se kutsuu itseään loputtomiin. Rekursiivinen funktio näyttää siis tyypillisesti seuraavanlaiselta:

function recurse() { if(condition) { // stop calling itself //... } else { recurse(); }}
Code language: JavaScript (javascript)

yleensä rekursiivisia funktioita käytetään hajottamaan iso ongelma pienemmiksi. Voit huomata, että niitä käytetään paljon tietorakenteissa, kuten binääripuissa ja graafeissa sekä algoritmeissa, kuten binäärihaussa ja quicksortissa.

JavaScript rekursiiviset funktiot esimerkkejä

otetaan joitakin esimerkkejä rekursiivisten funktioiden käytöstä.

1) yksinkertainen JavaScript-rekursiivinen funktioesimerkki

Oletetaan, että täytyy kehittää funktio, joka laskee määrätystä luvusta 1: een. Esimerkiksi laskettaessa 10: stä 1: een:

321

seuraava osoittaa countDown() funktio:

function countDown(fromNumber) { console.log(fromNumber);}countDown(3);
Code language: JavaScript (javascript)

Tämä countDown(3) näyttää vain numero 3.

laskeaksesi luvun 3: sta 1: een, voit:

  1. näyttää luvun 3.
  2. ja soittaa countDown(2), joka osoittaa numeron 2.
  3. ja soittaa countDown(1), joka näyttää numeron 1.

seuraavat muutokset countDown() rekursiiviseksi funktioksi:

Tämä countDown(3) jatkuu, kunnes kutsupinon koko ylittyy, näin:

Uncaught RangeError: Maximum call stack size exceeded.
Code language: JavaScript (javascript)

… koska sillä ei ole ehtoa lopettaa itsensä soittaminen.

laskenta loppuu, kun seuraava luku on nolla, joten lisätään if-ehto seuraavasti:

Lähtö:

321

countDown() näyttää toimivan odotetusti.

kuitenkin, kuten Funktiotyyppisessä tutoriaalissa mainitaan, funktion nimi on viittaus varsinaiseen funktioobjektiin.

Jos jossain koodissa funktion nimi asetetaan nollaksi, rekursiivinen funktio lakkaa toimimasta.

esimerkiksi seuraava koodi johtaa virheeseen:

let newYearCountDown = countDown;// somewhere in the codecountDown = null;// the following function call will cause an errornewYearCountDown(10);
Code language: JavaScript (javascript)

Error:

Uncaught TypeError: countDown is not a function
Code language: JavaScript (javascript)

miten skripti toimii:

  • ensin annetaan muuttujan countDown funktion nimi newYearCountDown.
  • toiseksi, aseta countDown funktio viittaus null.
  • kolmanneksi kutsutaan newYearCountDown funktio.

koodi aiheuttaa virheen, koska countDown() funktio viittaa countDown funktion nimeen, joka oli asetettu null funktion kutsuhetkellä.

sen korjaamiseen voidaan käyttää nimettyä funktion lauseketta seuraavasti:

2) Laske lukuesimerkin

numeroiden summa esim. 324 3 + 2 + 4 = 9.

rekursiivisen tekniikan soveltamiseksi voidaan käyttää seuraavia vaiheita:

f(324) = 4 + f(32)f(32) = 2 + f(3)f(3) = 3 + 0 (stop here)

So

f(324) = 4 + f(32) f(324) = 4 + 2 + f(3) f(324) = 4 + 2 + 3

seuraava havainnollistaa sumOfDigits() rekursiivinen funktio:

miten se toimii:

yhteenveto

  • rekursiivinen funktio on funktio, joka kutsuu itseään, kunnes se ei
  • rekursiivisella funktiolla on aina ehto, joka estää funktiota kutsumasta itseään.
  • Auttoiko tämä opetusohjelma?
  • YesNo