Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Rekursion | Rekursion och lambda-funktioner
Pythonfunktioner Handledning
Avsnitt 5. Kapitel 1
single

single

Rekursion

Svep för att visa menyn

Note
Definition

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

123456
def 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:

  1. times = 3 → villkoret är sant, skriv ut meddelandet, anropa print_message(message, 2);
  2. times = 2 → villkoret är sant, skriv ut meddelandet, anropa print_message(message, 1);
  3. times = 1 → villkoret är sant, skriv ut meddelandet, anropa print_message(message, 0);
  4. 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.

Note
Notera

Varje rekursiv funktion måste ha ett basfall. Utan det kommer funktionen att anropa sig själv oändligt och orsaka ett RecursionError.

Uppgift

Svep för att börja koda

Implementera en rekursiv funktion list_sum som beräknar summan av alla element i en lista.

  1. Om listan numbers är tom, returnera 0 — detta är basfallet;
  2. Annars, returnera första elementet adderat till resultatet av ett rekursivt anrop med resten av listan.

Lösning

Switch to desktopByt till skrivbordet för praktisk övningFortsätt där du är med ett av alternativen nedan
Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 5. Kapitel 1
single

single

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

some-alt