Wat is recursie en hoe gebruik je het?

Wat is recursie en hoe gebruik je het?

Recursie is een leuk programmeerconcept, maar het kan een beetje lastig zijn om te leren. Recursie betekent gewoon iets dat zich herhaalt. Als je een brutaal voorbeeld van recursie wilt zien, probeer dan te zoeken naar recursie op Google. U zult een paasei vinden waarbij de suggesties voor zoekresultaten recursief zijn. Als je daarentegen wilt leren hoe je een recursieve functie codeert, lees dan verder!

Wat is een recursieve functie?

Een recursieve functie is een functie die zichzelf aanroept. U maakt in wezen een lus met een functie. Zoals je je kunt voorstellen, kunnen dit lastige functies zijn om te schrijven. U wilt niet dat uw code voor altijd blijft lopen.

Net als bij een lus, wordt een recursieve functie bestuurd door een voorwaarde. Zodra aan de voorwaarde is voldaan, stopt de functie met zichzelf aan te roepen, waardoor de lus wordt gestopt. Dit is hoe u een functie kunt maken die zichzelf aanroept zonder dat deze voor altijd draait.

Hoewel een recursieve functie werkt als een lus, wordt deze door de computer anders uitgevoerd. Sommige algoritmen zijn dus efficiënter in een lus en andere hebben baat bij een recursieve functie. Maar voordat we kijken naar het gebruik van een recursieve functie, moet u weten hoe u er een schrijft.

Hoe schrijf je een recursieve functie?

Alle recursieve functies hebben dezelfde basisstructuur:

FUNCTION name IF condition THEN RETURN result ELSE CALL FUNCTION name END FUNCTION

Het bovenstaande voorbeeld is geschreven in pseudo-code. Het schetst de structuur van de functie, die op elke taal kan worden toegepast. Voor de eenvoud zullen we ons in dit artikel concentreren op Python.

Het eerste dat moet worden opgemerkt over een recursieve functie is dat wanneer aan de voorwaarde is voldaan, de functie de recursie verlaat. Dit betekent dat wanneer u een recursieve functie schrijft, het eerste dat u wilt bepalen, is wanneer u de recursie moet stoppen.

Als niet aan de voorwaarde wordt voldaan, roept de functie zichzelf aan. Dus als u informatie naar de volgende lus wilt sturen, moet u deze als argument in uw functie verzenden. Dit kan recursieve functies veel meer kracht geven.

Gerelateerd: Wat is een functie in programmeren?

Recursief functievoorbeeld in Python

Het zal veel gemakkelijker zijn om te begrijpen hoe recursie werkt als u het in actie ziet. Laten we, om het te demonstreren, een recursieve functie schrijven die de faculteit van een getal retourneert.

Faculteiten retourneren het product van een getal en van alle gehele getallen ervoor. De faculteit van 5 is bijvoorbeeld 5 x 4 x 3 x 2 x 1 of 120.

def factorialFunction(numberToMultiply): if numberToMultiply == 1 : return 1 else : return numberToMultiply * factorialFunction(numberToMultiply - 1) result = factorialFunction(3) print(result) //Outputs: 6

Het bovenstaande programma geeft je het resultaat 6, wat de faculteit is van het getal 3. Dit kan in het begin een beetje verwarrend zijn. Het helpt als we het programma stap voor stap doorlopen.

  1. Wanneer de functie wordt aangeroepen, is numberToMultiply gelijk aan 3.
  2. Er wordt niet aan de voorwaarde voldaan, dus gaan we naar de else- voorwaarde.
  3.  Onze functie retourneert 3 * maar wordt dan gepauzeerd. Het moet zichzelf oproepen om de rest van de waarde te bepalen die het teruggeeft.
  4. Wanneer de functie deze keer wordt aangeroepen, is de waarde van numberToMultiply gelijk aan 2.
  5. Er wordt niet aan de voorwaarde voldaan, dus gaan we naar de else-voorwaarde.
  6. Onze functie retourneert 2 * maar wordt dan gepauzeerd. Het moet zichzelf oproepen om de rest van de waarde te bepalen die het teruggeeft.
  7. De functie wordt nog een keer aangeroepen. Deze keer is de waarde van numberToMultiply gelijk aan 1.
  8. Onze if- voorwaarde is vervuld. De functie retourneert 1.
  9. De functie uit stap 6 kan nu 2 * 1 teruggeven aan de functie op stap 3.
  10. De functie in stap drie kan nu 3 * 2 * 1 retourneren, wat 6 is.

Wat is recursie en hoe gebruik je het?

Recursie is een lastig begrip. Het kan handig zijn om het te zien als het stapelen van een functie op een andere functie. Zodra een functie uiteindelijk is opgelost, kan deze de informatie terug naar de stapel sturen, totdat alle functies hun antwoord hebben.

Dit is eigenlijk ongeveer wat uw computer doet. Wanneer u de functie aanroept, wordt deze in het geheugen vastgehouden totdat deze wordt geretourneerd. Dit betekent dat recursieve functies veel meer geheugen kunnen gebruiken dan een lus.

Het is dus misschien niet efficiënt om lussen als recursieve functies te schrijven, maar het is een geweldige manier om te oefenen met het construeren ervan. U zou lussen moeten kunnen coderen als recursieve functies met vergelijkbare resultaten.

Een voorbeeld van het converteren van een lus naar een recursieve functie

print("Enter an even number:") i = int(input()) while (i % 2) != 0 : print("That number is not even. Please enter a new number:") i = int(input())

Deze lus kan ook recursief worden geschreven als:

def recursiveFunction(number) : if (number % 2) == 0 : return number else: print("That number is not even. Please enter a new number:") recursiveFunction(int(input())) print("Enter and even number:") i = recursiveFunction(int(input()))

De eerste stap is om te bepalen wanneer u wilt dat uw functie stopt. In dit geval willen we dat het stopt zodra een even getal is ingevoerd. In ons voorbeeld volgt nummer de invoer van de gebruiker. Als ze een even getal invoeren, geven we het getal terug. Anders blijven we om een ​​nieuw nummer vragen.

Om de lus in te stellen, roepen we onze functie opnieuw aan. Maar deze keer is het nummer dat we doorgeven aan de volgende functie het nieuwe nummer dat door de gebruiker is ingevoerd. De volgende functieaanroep zal het nummer controleren.

Dit is echt een slechte functie! Ja, het controleert of het aantal even is, zoals onze lus, maar het is niet efficiënt. Elke keer dat de gebruiker een oneven getal invoert, wordt de functie in het geheugen vastgehouden en wordt een nieuwe functie aangeroepen. Als je dit vaak genoeg doet, heb je geen geheugen meer!

Gerelateerd: Basisvoorbeelden van Python die u zullen helpen snel te leren

Een praktijkvoorbeeld van een recursieve functie

De bovenstaande voorbeelden waren goede voorbeelden van wanneer recursie niet moet worden gebruikt. Dus, waar wordt recursie gebruikt? Een goed voorbeeld van wanneer u recursie zou willen gebruiken, is zoeken in een binaire boom.

Wat is recursie en hoe gebruik je het?

Wanneer gegevens in een binaire boomstructuur zijn gestructureerd, moet u veel paden bewandelen om naar gegevens te zoeken. Op elk punt in de boom moet u beslissen of u rechts of links verder wilt zoeken. Je zou in een variabele kunnen opslaan welk deel van de boomstructuur je hebt bezocht, maar een recursieve functie kan die informatie natuurlijk volgen.

Stel je voor dat we op zoek zijn naar het getal zes in de boom erboven. We zouden een recursieve functie kunnen maken die de boom van links naar rechts doorzoekt. Het algoritme ziet er ongeveer zo uit:

FUNCTION searchTree(branchToSearch) IF find 6 OR end of tree THEN RETURN result ELSE PROCESS branch CALL FUNCTION searchTree(left) CALL FUNCTION searchTree(right) END FUNCTION

In dit pseudocode-voorbeeld zou het algoritme eerst de linkerkant van de boom doorzoeken. Elke keer dat een nieuw nummer wordt bezocht, wordt de functie gepauzeerd en in het geheugen vastgehouden. Hierdoor kunnen we bijhouden waar we zijn geweest.

Het algoritme zal altijd eerst zo ver mogelijk naar de linkerkant zoeken. zodra het het einde van de boom heeft bereikt, wordt de zoekboom (links) voltooid en wordt de rechterkant gecontroleerd. Zodra beide zijden zijn gecontroleerd, wordt er een back-up gemaakt van een tak en wordt de rechterkant gecontroleerd.

Als de algoritmen de hele boom zouden doorzoeken, zou het dit doen in de volgorde:

2, 7, 2, 6, 5, 11, 5, 9 en 4

Kijk of je kunt volgen met behulp van de bovenstaande pseudo-code.

Beoordeling van recursie

Recursie is een geavanceerd onderwerp. Het zal enige tijd duren om het te begrijpen en zelfs nog langer om goed te worden in het coderen. Het helpt als je stap voor stap door recursieve functies loopt. Het kan zelfs helpen om indexkaarten of post-it-notities te stapelen terwijl u een functie doorloopt bij het leren vertegenwoordigen van elke functieaanroep.

Wanneer u een recursieve functie schrijft, begint u met te beslissen hoe u de functie wilt verlaten. Bepaal vervolgens hoe u uw lus instelt. Bepaal welke informatie naar de volgende functieaanroep moet worden verzonden en wat moet worden geretourneerd.

De beste manier om recursie te leren, is door het te oefenen en van je fouten te leren. Bekijk een deel van je oude code en daag jezelf uit om lussen te herschrijven als recursieve functies. Het zal uw code waarschijnlijk niet efficiënter maken, maar het is een goede gewoonte.


Python gebruiken als opdrachtregelcalculator

Python gebruiken als opdrachtregelcalculator

Hoewel u een grafische rekenmachine op uw computer kunt gebruiken, kan de Python-programmeertaalinterpreter ook dienst doen als bureaurekenmachine. Het is zo'n populaire hardloopgrap in de Python-gemeenschap dat het wordt genoemd in de officiële tutorial. Hier leest u hoe u Python als rekenmachine kunt gebruiken.

De 8 beste Java-blogs voor programmeurs

De 8 beste Java-blogs voor programmeurs

Als programmeur moet je uitdagingen aangaan om te overleven en wonderen te bouwen op het gebied van ontwikkeling of programmeren. Als u dus een geavanceerde programmeertaal wilt leren om uw carrièrevaardigheden te verbeteren, is Java een van de beste vooruitzichten die er zijn.

7 essentiële commandos om aan de slag te gaan met Python voor beginners

7 essentiële commandos om aan de slag te gaan met Python voor beginners

Het leren van een nieuwe programmeertaal zoals Python wordt moeiteloos als je een uitgebreid stappenplan hebt waarin wordt beschreven welke concepten je als beginner moet leren en hoe je verder kunt komen om de volgende mijlpaal te bereiken. Zelfs gevorderde programmeurs zouden hun basis regelmatig moeten opfrissen om een ​​solide basis voor zichzelf op te bouwen.

Responsieve webontwerpprincipes

Responsieve webontwerpprincipes

Tegenwoordig is het gebruikelijk om een ​​website of app te bouwen die de gebruikersinterface aanpast, afhankelijk van de browser of het apparaat. Er zijn twee benaderingen om dit doel te bereiken. De eerste omvat het maken van verschillende versies van uw website of app voor verschillende apparaten. Maar het is inefficiënt en kan leiden tot onvoorspelbare fouten.

Het aantal cijfers in een getal tellen met C++, Python en JavaScript

Het aantal cijfers in een getal tellen met C++, Python en JavaScript

Werken met getallen is een integraal onderdeel van programmeren. Elke programmeertaal biedt ondersteuning om getallen op veel verschillende manieren te manipuleren. In dit artikel leert u hoe u het totale aantal cijfers in een geheel getal kunt vinden met behulp van iteratieve, op logs gebaseerde en op tekenreeksen gebaseerde benaderingen.

SQL versus NoSQL: wat is de beste database voor uw volgende project?

SQL versus NoSQL: wat is de beste database voor uw volgende project?

SQL versus NoSQL: wat is de beste database voor uw volgende project?

Tweets insluiten in uw WordPress-berichten

Tweets insluiten in uw WordPress-berichten

Het insluiten van services van derden in uw WordPress-berichten is een opwindende manier om de interesse van een bezoeker te wekken. Ingesloten inhoud biedt ook visuele aanwijzingen die het scannen gemakkelijker maken. WordPress heeft het toevoegen van dit soort inhoud eenvoudig gemaakt.

Hoe de map Node Modules te verwijderen met npkill

Hoe de map Node Modules te verwijderen met npkill

Node.js is een JavaScript-runtimeomgeving waarmee u JavaScript buiten webbrowsers kunt uitvoeren, waardoor het een populaire keuze is voor het ontwikkelen van allerlei soorten toepassingen. Een deel van zijn populariteit is te danken aan de overvloed aan NPM-pakketten die er zijn om de ontwikkelaarservaring te vergemakkelijken.

Hoe u uw eerste Solidity-code schrijft en compileert

Hoe u uw eerste Solidity-code schrijft en compileert

Solidity is de programmeertaal die wordt gebruikt door slimme contracten op de Ethereum-blockchain. Het is een statisch getypeerde, objectgeoriënteerde programmeertaal.

Top 5 badges die uw GitHub-repository een boost zullen geven

Top 5 badges die uw GitHub-repository een boost zullen geven

GitHub-badges kunnen de leesbaarheid van een repository vergroten door gebruikers een snelle manier te bieden om de repository-statistieken vast te leggen. Badges kunnen worden ingesloten in uw README.md om het belang en de noodzaak van uw project aan andere ontwikkelaars duidelijk te maken. Als gevolg hiervan krijgen lezers een heel snel idee van de repository door de bijgevoegde badges te controleren.

Wat is de Internationale Dag van de Programmeurs? 3 manieren om dit jaar te vieren

Wat is de Internationale Dag van de Programmeurs? 3 manieren om dit jaar te vieren

Internationale feestdagen zijn een leuke manier om erkenning te geven aan sociale zaken, historische dagen en respectieve carrières. International Programmers' Day viert de rol die programmeurs spelen om het dagelijks leven te verbeteren. De beschaafde wereld waarin we leven is een product van het harde werk van programmeurs.

Hoe werkt de methode Python String format()? 10 voorbeelden

Hoe werkt de methode Python String format()? 10 voorbeelden

Of het nu gaat om een ​​databasequery of resultaten van wiskundige bewerkingen, de Python-tekenreeksindelingsmethode biedt een meer dynamische en aantrekkelijke manier om resultaten aan een gebruiker te presenteren.

Visual Studio 2022 vs. 2019: moet u nu upgraden? uitgelegd

Visual Studio 2022 vs. 2019: moet u nu upgraden? uitgelegd

Eerder dit jaar bracht Microsoft de preview-versie van Visual Studio 2022 uit in de wilde programmeerwereld. Dit is goed nieuws! Het is een extreem populaire IDE, maar aan een opknapbeurt of misschien zelfs een revisie toe, gezien het tempo van de veranderingen in het DevOps-ecosysteem waarin het gedijt.

Een eenvoudige introductie tot softwarestatistieken

Een eenvoudige introductie tot softwarestatistieken

Softwarestatistieken zijn metingen die worden gebruikt om verschillende aspecten van uw software te kwantificeren. Deze aspecten kunnen variëren van de kosten, kwaliteit en efficiëntie van het ontwikkelteam.

Flask of CherryPy: welk Python-framework moet je gebruiken?

Flask of CherryPy: welk Python-framework moet je gebruiken?

Als je een Python-ontwikkelaar bent, kun je enorm profiteren van de reeks beschikbare frameworks. Terwijl sommige kaders het meest geschikt zijn voor grote ecosystemen, zijn andere gespecialiseerd in het dienen van specifieke ontwikkelingsdoelen. Lees verder om de basisfuncties, het gebruik en de verschillen tussen twee Python-frameworks te leren: Flask en CherryPy.

N-cijferige perfecte kubussen en vierkanten vinden met Python, C++ en JavaScript

N-cijferige perfecte kubussen en vierkanten vinden met Python, C++ en JavaScript

Veel programmeurs houden ervan om lastige wiskundige problemen op te lossen met behulp van code. Het helpt de geest te scherpen en het probleemoplossend vermogen te verbeteren. In dit artikel leer je hoe je de kleinste en grootste n-cijferige perfecte vierkanten en kubussen kunt vinden met Python, C++ en JavaScript. Elk voorbeeld bevat ook voorbeelduitvoer voor verschillende waarden.

Hoe de Python if-instructie te gebruiken?

Hoe de Python if-instructie te gebruiken?

Het if-statement is de drijvende kracht achter logisch programmeren. Als gevolg hiervan is een beter begrip van Pythons een belangrijke toevoeging aan je Python-programmeervaardigheden.

Coderen is niet voor iedereen: 9 technische banen die je zonder kunt krijgen

Coderen is niet voor iedereen: 9 technische banen die je zonder kunt krijgen

Technologie is zonder twijfel de industrie van de toekomst. Als je een van de miljoenen jonge volwassenen bent die op het punt staan ​​om in de eerste fase van je carrière te duiken, vraag je je misschien af ​​wat je moet doen als je niet van coderen houdt.

Hoe u uw virtuele Python-omgevingen effectief kunt maken en beheren

Hoe u uw virtuele Python-omgevingen effectief kunt maken en beheren

U kunt een real-life project in Python niet met succes voltooien zonder een virtuele omgeving. Tools zoals virtualenvwrapper en virtualenv zijn gebruikelijk voor het maken en beheren van virtuele omgevingen voor webontwikkeling, terwijl anaconda veel wordt gebruikt door datawetenschappers.

Het CSS Box-model uitgelegd met voorbeelden

Het CSS Box-model uitgelegd met voorbeelden

Als u van plan bent een geweldige webpagina-indeling te maken, moet u weten over marges, randen, opvulling en inhoud. Elk element in webdesign, of het nu een afbeelding of tekst is, gebruikt een kader met deze eigenschappen. Je kunt eenvoudig complexe lay-outs bouwen door te spelen met het doosmodel. In dit artikel zullen we het CSS Box-model ontleden en laten zien hoe u deze eigenschappen kunt gebruiken met praktische voorbeelden.

Python gebruiken als opdrachtregelcalculator

Python gebruiken als opdrachtregelcalculator

Hoewel u een grafische rekenmachine op uw computer kunt gebruiken, kan de Python-programmeertaalinterpreter ook dienst doen als bureaurekenmachine. Het is zo'n populaire hardloopgrap in de Python-gemeenschap dat het wordt genoemd in de officiële tutorial. Hier leest u hoe u Python als rekenmachine kunt gebruiken.

De 8 beste Java-blogs voor programmeurs

De 8 beste Java-blogs voor programmeurs

Als programmeur moet je uitdagingen aangaan om te overleven en wonderen te bouwen op het gebied van ontwikkeling of programmeren. Als u dus een geavanceerde programmeertaal wilt leren om uw carrièrevaardigheden te verbeteren, is Java een van de beste vooruitzichten die er zijn.

7 essentiële commandos om aan de slag te gaan met Python voor beginners

7 essentiële commandos om aan de slag te gaan met Python voor beginners

Het leren van een nieuwe programmeertaal zoals Python wordt moeiteloos als je een uitgebreid stappenplan hebt waarin wordt beschreven welke concepten je als beginner moet leren en hoe je verder kunt komen om de volgende mijlpaal te bereiken. Zelfs gevorderde programmeurs zouden hun basis regelmatig moeten opfrissen om een ​​solide basis voor zichzelf op te bouwen.

Responsieve webontwerpprincipes

Responsieve webontwerpprincipes

Tegenwoordig is het gebruikelijk om een ​​website of app te bouwen die de gebruikersinterface aanpast, afhankelijk van de browser of het apparaat. Er zijn twee benaderingen om dit doel te bereiken. De eerste omvat het maken van verschillende versies van uw website of app voor verschillende apparaten. Maar het is inefficiënt en kan leiden tot onvoorspelbare fouten.

Het aantal cijfers in een getal tellen met C++, Python en JavaScript

Het aantal cijfers in een getal tellen met C++, Python en JavaScript

Werken met getallen is een integraal onderdeel van programmeren. Elke programmeertaal biedt ondersteuning om getallen op veel verschillende manieren te manipuleren. In dit artikel leert u hoe u het totale aantal cijfers in een geheel getal kunt vinden met behulp van iteratieve, op logs gebaseerde en op tekenreeksen gebaseerde benaderingen.

De 9 beste Docker-alternatieven voor containerbeheer

De 9 beste Docker-alternatieven voor containerbeheer

Containers zijn zeer nuttig voor softwareontwikkeling, implementatie en beheer in een virtuele omgeving. Docker is handig in het containerisatieproces, maar het is niet het enige platform dat er is. Als u op zoek bent naar alternatieven voor Docker, hoeft u niet verder te zoeken. Deze lijst toont enkele veelzijdige en efficiënte Docker-alternatieven die u in uw volgende project kunt gebruiken.

SQL versus NoSQL: wat is de beste database voor uw volgende project?

SQL versus NoSQL: wat is de beste database voor uw volgende project?

SQL versus NoSQL: wat is de beste database voor uw volgende project?

Tweets insluiten in uw WordPress-berichten

Tweets insluiten in uw WordPress-berichten

Het insluiten van services van derden in uw WordPress-berichten is een opwindende manier om de interesse van een bezoeker te wekken. Ingesloten inhoud biedt ook visuele aanwijzingen die het scannen gemakkelijker maken. WordPress heeft het toevoegen van dit soort inhoud eenvoudig gemaakt.

Hoe de map Node Modules te verwijderen met npkill

Hoe de map Node Modules te verwijderen met npkill

Node.js is een JavaScript-runtimeomgeving waarmee u JavaScript buiten webbrowsers kunt uitvoeren, waardoor het een populaire keuze is voor het ontwikkelen van allerlei soorten toepassingen. Een deel van zijn populariteit is te danken aan de overvloed aan NPM-pakketten die er zijn om de ontwikkelaarservaring te vergemakkelijken.

Hoe u uw eerste Solidity-code schrijft en compileert

Hoe u uw eerste Solidity-code schrijft en compileert

Solidity is de programmeertaal die wordt gebruikt door slimme contracten op de Ethereum-blockchain. Het is een statisch getypeerde, objectgeoriënteerde programmeertaal.