Articles

JavaScript recursieve functie

samenvatting: in deze handleiding leert u hoe u de recursieve techniek kunt gebruiken om een JavaScript recursieve functie te ontwikkelen, een functie die zichzelf aanroept.

Inleiding tot de JavaScript recursieve functies

een recursieve functie is een functie die zichzelf aanroept totdat het niet meer gebeurt. en deze techniek wordt recursie genoemd.

stel dat u een functie hebt genaamd recurse(). De recurse() is een recursieve functie als het zichzelf in zijn lichaam aanroept, als volgt:

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

een recursieve functie heeft altijd een voorwaarde om te stoppen met zichzelf aan te roepen, anders zal het zichzelf onbeperkt aanroepen. Een recursieve functie ziet er dus meestal als volgt uit:

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

over het algemeen worden recursieve functies gebruikt om een groot probleem op te splitsen in kleinere. U kunt vinden dat ze zwaar worden gebruikt in de datastructuren zoals binaire bomen en grafieken en algoritmen zoals binair zoeken en quicksort.

Javascript recursieve functievoorbeelden

laten we enkele voorbeelden nemen van het gebruik van de recursieve functies.

1) Een eenvoudige JavaScript recursieve functie voorbeeld

stel dat u een functie moet ontwikkelen die aftelt van een opgegeven getal naar 1. Om bijvoorbeeld af te tellen van 10 naar 1:

321

het volgende toont de countDown() functie:

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

Deze countDown(3) toont alleen het nummer 3.

om af te tellen van het getal 3 naar 1, kunt u:

  1. toon het getal 3.
  2. en roep de countDown(2) aan die het nummer 2 toont.
  3. en roep de countDown(1) aan die het nummer 1 toont.

de volgende veranderingen veranderen de countDown() naar een recursieve functie:

Deze countDown(3) zal draaien totdat de aanroepstackgrootte wordt overschreden, als volgt:

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

… omdat het niet de voorwaarde heeft om te stoppen met aanroepen.

het aftellen zal stoppen wanneer het volgende getal nul is, daarom voegen we als volgt een if-voorwaarde toe:

Output:

321

de countDown() lijkt te werken zoals verwacht.

echter, zoals vermeld in de functietype tutorial, is de naam van de functie een verwijzing naar het eigenlijke function object.

als ergens in de code de functienaam is ingesteld op null, zal de recursieve functie stoppen met werken.

bijvoorbeeld, de volgende code zal resulteren in een fout:

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

fout:

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

hoe het script werkt:

  • wijs eerst de functienaamcountDown toe aan de variabelenewYearCountDown.
  • ten tweede, stel de countDown functieverwijzing in naar null.
  • Ten derde, roep de functie newYearCountDown aan.

de code veroorzaakt een fout omdat de inhoud van de countDown() functie verwijst naar de countDown functienaam die op null was ingesteld op het moment dat de functie werd aangeroepen.

om het te repareren, kunt u een benoemde functie-expressie als volgt gebruiken:

2) Bereken de som van cijfers van een getal voorbeeld

gegeven een getal bijvoorbeeld 324, bereken de som van cijfers 3 + 2 + 4 = 9.

Om de toepassing van de recursieve techniek, kunt u de volgende stappen uit:

f(324) = 4 + f(32)f(32) = 2 + f(3)f(3) = 3 + 0 (stop here)

Dus

f(324) = 4 + f(32) f(324) = 4 + 2 + f(3) f(324) = 4 + 2 + 3

het volgende voorbeeld illustreert Het sumOfDigits() recursieve functie:

Hoe het werkt:

Overzicht

  • Een recursieve functie is een functie die zichzelf aanroept tot het niet
  • Een recursieve functie heeft altijd een voorwaarde dat stopt de functie die zichzelf aanroept.
  • Was deze tutorial nuttig ?
  • YesNo