Q: wat is de makkelijkste manier om de som van alle gehele getallen tussen 1 en 100?
A: eerst je de som van alle gehele getallen tussen 1 en 99, voeg dan 100.
Silly, juiste? Dit is eigenlijk een voorbeeld van een krachtige verdeel-en-heers-techniek in computerprogrammering bekend als "recursie." Recursie behandelt een berekening taak als een reeks van kleinere, gelijkaardige berekeningen, met de volgende kleinere berekening wordt berekend, en vervolgens de volgende en de volgende, totdat je bij een "basisscenario" met een bekende antwoord. Voor de volgende stap van het bovenstaande voorbeeld, om de som van de gehele getallen tussen 1 en 99, u gewoon de som van de gehele getallen tussen 1 en 98, voeg dan 99. Als je blijven gaan in de keten, zal u het basisscenario voor het optellen van hele getallen tussen 1 en 1, waarvan we weten dat het 1.
Een leuk gebruik van recursie is het schrijven van een programma dat kan je de oplossing van de puzzel van de toren van Hanoi. Dat raadsel is weergegeven in de afbeelding op deze pagina. Het doel is om alle schijven van de eerste post naar de derde post. De regels van de puzzel zijn:
- U kunt alleen één schijf tegelijk verplaatsen van een post naar de andere, wat betekent dat op een bepaald moment, hooguit één schijf uit een post worden kan.
- U kunt een schijf verplaatsen naar de tweede post als een rust ruimte.
- Schijven kunnen niet worden verplaatst op de top van een kleinere schijf.
Hoe kan deze puzzel worden opgesplitst in kleinere delen? Als de beelden laten zien, kan deze 7-schijf versie van de toren van Hanoi puzzel opgelost worden als:
- Oplossen van de 6-schijf versie van de puzzel van post A naar B. post
- Schijf 7 verplaatsen van post A naar C. post
- Oplossen van de 6-schijf versie van de puzzel opnieuw, ditmaal vanuit post B naar C. post
Voor dit instructable, ik gebruik JavaScript als de programmeertaal zodat u dit in een standaard webbrowser kan draaien. Het helpt om worden vertrouwd zijn met enkele elementaire computer programmeerconcepten, maar zelfs als je niet, hopelijk dit instructable zal interessant zijn.
Als je dit instructable, please vote voor me in de gecodeerde creaties wedstrijd vóór 18 mei 2015. Dank u.
Laten we beginnen met coderen!