Articles

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:

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

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:

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

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:

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

dette countDown(3) viser kun nummer 3.

for at tælle ned fra nummer 3 til 1 kan du:

  1. vise nummer 3.
  2. og ring til countDown(2) der viser nummeret 2.
  3. 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:

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

… 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:

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

fejl:

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

Sådan fungerer scriptet:

  • Tildel førstcountDown funktionsnavn til variablennewYearCountDown.
  • for det andet skal du indstillecountDown funktionsreference tilnull.
  • for det tredje skal du kaldenewYearCountDown – 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)

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