JavaScript rekursiv funktion
Oversigt: i denne vejledning lærer du, hvordan du bruger rekursionsteknikken til at udvikle en JavaScript-rekursiv funktion, som er en funktion, der kalder sig selv.
Introduktion til JavaScript-rekursive funktioner
en rekursiv funktion er en funktion, der kalder sig selv, indtil den ikke gør det. og denne teknik kaldes rekursion.
Antag at du har en funktion kaldetrecurse()
recurse()
er en rekursiv funktion, hvis den kalder sig inde i sin krop, sådan:
Code language: JavaScript (javascript)function recurse() { // ... recurse(); // ...}
en rekursiv funktion har altid en betingelse for at stoppe med at kalde sig selv, ellers vil den kalde sig på ubestemt tid. Så en rekursiv funktion ligner typisk følgende:
Code language: JavaScript (javascript)function recurse() { if(condition) { // stop calling itself //... } else { recurse(); }}
generelt bruges rekursive funktioner til at nedbryde et stort problem i mindre. Du kan opdage, at de er stærkt brugt i datastrukturer som binære træer og grafer og algoritmer som binær søgning og hurtigsort.
JavaScript rekursive funktionseksempler
lad os tage nogle eksempler på at bruge de rekursive funktioner.
1) Et simpelt JavaScript-rekursivt funktionseksempel
Antag, at du skal udvikle en funktion, der tæller ned fra et angivet tal til 1. For eksempel at tælle ned fra 10 til 1:
321
følgende viser countDown()
funktion:
Code language: JavaScript (javascript)function countDown(fromNumber) { console.log(fromNumber);}countDown(3);
dette countDown(3)
viser kun nummer 3.
for at tælle ned fra nummer 3 til 1 kan du:
- vise nummer 3.
- og ring til
countDown(2)
der viser nummeret 2. - og ring til
countDown(1)
der viser nummeret 1.
følgende ændrercountDown()
til en rekursiv funktion:
dettecountDown(3)
kører, indtil opkaldsstakstørrelsen overskrides, sådan her:
Code language: JavaScript (javascript)Uncaught RangeError: Maximum call stack size exceeded.
… fordi det ikke har tilstanden til at at stoppe med at kalde sig selv.
nedtællingen stopper, når det næste tal er nul, derfor tilføjer vi en if-betingelse som følger:
Output:
321
countDown()
synes at fungere som forventet.
som nævnt i funktionstypevejledningen er navnet på funktionen imidlertid en henvisning til det faktiske funktionsobjekt.
Hvis et sted i koden er funktionsnavnet indstillet til null, stopper den rekursive funktion.
for eksempel vil følgende kode resultere i en fejl:
Code language: JavaScript (javascript)let newYearCountDown = countDown;// somewhere in the codecountDown = null;// the following function call will cause an errornewYearCountDown(10);
fejl:
Code language: JavaScript (javascript)Uncaught TypeError: countDown is not a function
Sådan fungerer scriptet:
- Tildel først
countDown
funktionsnavn til variablennewYearCountDown
. - for det andet skal du indstille
countDown
funktionsreference tilnull
. - for det tredje skal du kalde
newYearCountDown
– funktionen.
koden forårsager en fejl, fordi kroppen afcountDown()
funktionen refererer tilcountDown
funktionsnavnet, der blev indstillet tilnull
på tidspunktet for at kalde funktionen.
for at rette det kan du bruge et navngivet funktionsudtryk som følger:
2) Beregn summen af cifre i et taleksempel
givet et tal f. eks. 324, beregne summen af cifre 3 + 2 + 4 = 9.
for at anvende den rekursive teknik kan du bruge følgende trin:
f(324) = 4 + f(32)f(32) = 2 + f(3)f(3) = 3 + 0 (stop here)
så
f(324) = 4 + f(32) f(324) = 4 + 2 + f(3) f(324) = 4 + 2 + 3
følgende illustrerer sumOfDigits()
rekursiv funktion:
Sådan fungerer det:
resume
- en rekursiv funktion er en funktion, der kalder sig selv, indtil den ikke
- en rekursiv funktion har altid en tilstand, der forhindrer funktionen i at kalde sig selv.
- var denne tutorial nyttig ?
- YesNo