Articles

JavaScript rekursiv funktion

sammanfattning: i denna handledning lär du dig hur du använder rekursionstekniken för att utveckla en JavaScript rekursiv funktion, som är en funktion som kallar sig själv.

introduktion till JavaScript rekursiva funktioner

en rekursiv funktion är en funktion som kallar sig tills den inte gör det. och denna teknik kallas rekursion.

Antag att du har en funktion som heter recurse()recurse() är en rekursiv funktion om den kallar sig inuti sin kropp, så här:

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

en rekursiv funktion har alltid ett villkor att sluta kalla sig själv, annars kommer den att kalla sig på obestämd tid. Så en rekursiv funktion ser vanligtvis ut som följande:

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

generellt används rekursiva funktioner för att bryta ner ett stort problem i mindre. Du kan upptäcka att de används kraftigt i datastrukturer som binära träd och grafer och algoritmer som binär sökning och quicksort.

JavaScript rekursiva funktionsexempel

Låt oss ta några exempel på att använda rekursiva funktioner.

1) ett enkelt JavaScript rekursivt funktionsexempel

Antag att du måste utveckla en funktion som räknas ner från ett angivet nummer till 1. Till exempel, för att räkna ner från 10 till 1:

321

följande visar countDown() funktion:

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

dettacountDown(3) visar endast nummer 3.

för att räkna ner från nummer 3 till 1 kan du:

  1. visa nummer 3.
  2. och ring countDown(2) som visar numret 2.
  3. och ring countDown(1) som visar numret 1.

följande ändrar countDown() till en rekursiv funktion:

detta countDown(3) körs tills samtalsstackstorleken överskrids, så här:

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

… eftersom det inte har villkoret att sluta kalla sig själv.

nedräkningen stannar när nästa nummer är noll, därför lägger vi till ett if-villkor enligt följande:

utgång:

321

countDown() verkar fungera som förväntat.

men som nämnts i funktionstyphandledningen är namnet på funktionen en hänvisning till det faktiska funktionsobjektet.

om någonstans i koden är funktionsnamnet inställt på null, kommer den rekursiva funktionen att sluta fungera.

till exempel kommer följande kod att resultera i ett fel:

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

fel:

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

hur skriptet fungerar:

  • tilldela förstcountDown funktionsnamn till variabelnnewYearCountDown.
  • för det andra, Ställ incountDown funktionsreferens tillnull.
  • för det tredje, Ring funktionen newYearCountDown.

koden orsakar ett fel eftersom kroppen för funktionen countDown() refererar till countDown Funktionsnamn som var inställt på null vid Anropet av funktionen.

för att fixa det kan du använda ett namngivet funktionsuttryck enligt följande:

2) Beräkna summan av siffror i ett tal exempel

givet ett tal t. ex. 324, beräkna summan av siffror 3 + 2 + 4 = 9.

för att tillämpa rekursiv teknik kan du använda följande steg:

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öljande illustrerar sumOfDigits() rekursiv funktion:

hur det fungerar:

sammanfattning

  • en rekursiv funktion är en funktion som anropar sig själv tills den inte
  • en rekursiv funktion har alltid ett tillstånd som hindrar funktionen från att anropa sig själv.
  • var denna handledning till hjälp ?
  • YesNo