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:
Code language: JavaScript (javascript)function recurse() { // ... recurse(); // ...}
rekursiivisella funktiolla on aina ehto lopettaa itsensä kutsuminen, muuten se kutsuu itseään loputtomiin. Rekursiivinen funktio näyttää siis tyypillisesti seuraavanlaiselta:
Code language: JavaScript (javascript)function recurse() { if(condition) { // stop calling itself //... } else { recurse(); }}
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:
Code language: JavaScript (javascript)function countDown(fromNumber) { console.log(fromNumber);}countDown(3);
Tämä countDown(3)
näyttää vain numero 3.
laskeaksesi luvun 3: sta 1: een, voit:
- näyttää luvun 3.
- ja soittaa
countDown(2)
, joka osoittaa numeron 2. - 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:
Code language: JavaScript (javascript)Uncaught RangeError: Maximum call stack size exceeded.
… 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:
Code language: JavaScript (javascript)let newYearCountDown = countDown;// somewhere in the codecountDown = null;// the following function call will cause an errornewYearCountDown(10);
Error:
Code language: JavaScript (javascript)Uncaught TypeError: countDown is not a function
miten skripti toimii:
- ensin annetaan muuttujan
countDown
funktion niminewYearCountDown
. - toiseksi, aseta
countDown
funktio viittausnull
. - 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