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:
Code language: JavaScript (javascript)function recurse() { // ... recurse(); // ...}
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:
Code language: JavaScript (javascript)function recurse() { if(condition) { // stop calling itself //... } else { recurse(); }}
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:
Code language: JavaScript (javascript)function countDown(fromNumber) { console.log(fromNumber);}countDown(3);
dettacountDown(3)
visar endast nummer 3.
för att räkna ner från nummer 3 till 1 kan du:
- visa nummer 3.
- och ring
countDown(2)
som visar numret 2. - 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:
Code language: JavaScript (javascript)Uncaught RangeError: Maximum call stack size exceeded.
… 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:
Code language: JavaScript (javascript)let newYearCountDown = countDown;// somewhere in the codecountDown = null;// the following function call will cause an errornewYearCountDown(10);
fel:
Code language: JavaScript (javascript)Uncaught TypeError: countDown is not a function
hur skriptet fungerar:
- tilldela först
countDown
funktionsnamn till variabelnnewYearCountDown
. - för det andra, Ställ in
countDown
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)
Så
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