single
Rekursion
Svep för att visa menyn
En rekursiv funktion är en funktion som anropar sig själv för att lösa ett problem genom att dela upp det i mindre, enklare delar.
De viktigaste delarna av rekursion är:
- Basfall: villkoret som stoppar rekursionen;
- Rekursivt fall: delen där funktionen anropar sig själv med ett enklare argument.
Varför använda rekursion?
Vissa problem kan naturligt uttryckas i form av mindre delproblem. Rekursion ger ett tydligt och elegant sätt att lösa dessa genom att låta en funktion anropa sig själv för att hantera de enklare fallen. Det används ofta vid uppgifter som att bearbeta trädstrukturer, utforska vägar eller dela upp strukturer (t.ex. listor, strängar).
Ett enkelt exempel
123456def print_message(message, times): if times > 0: # Base case: stop when times is 0 print(message) print_message(message, times - 1) # Recursive case print_message("Hello, Recursion!", 3)
Gå igenom steg för steg för att förstå hur detta fungerar:
times = 3→ villkoret är sant, skriv ut meddelandet, anropaprint_message(message, 2);times = 2→ villkoret är sant, skriv ut meddelandet, anropaprint_message(message, 1);times = 1→ villkoret är sant, skriv ut meddelandet, anropaprint_message(message, 0);times = 0→ villkoret är falskt, rekursionen stoppas.
Resultat: meddelandet skrivs ut tre gånger.
Anropsstacken
Varje gång funktionen anropar sig själv läggs en ny ram till anropsstacken — en minnesstruktur som håller reda på aktiva funktionsanrop. När basfallet nås avslutas varje tidigare anrop ett efter ett i omvänd ordning.
Varje rekursiv funktion måste ha ett basfall. Utan det kommer funktionen att anropa sig själv oändligt och orsaka ett RecursionError.
Svep för att börja koda
Implementera en rekursiv funktion list_sum som beräknar summan av alla element i en lista.
- Om listan
numbersär tom, returnera0— detta är basfallet; - Annars, returnera första elementet adderat till resultatet av ett rekursivt anrop med resten av listan.
Lösning
Tack för dina kommentarer!
single
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal