D· AI-utvecklareprogrammering· ca 45 min· grundläggande — ändras sällan· verifierad 2026-09-20
Rekursion
Kunna skriva rekursiva funktioner och förstå basfall och anropsstack.
Förkunskaper
Intuition
En rekursiv funktion anropar sig själv på ett mindre problem, tills problemet är så litet att svaret är uppenbart.
Två delar krävs, alltid:
- Basfall — när ska den sluta? Utan det: oändlig rekursion och
RecursionError. - Rekursivt steg — problemet måste bli mindre varje gång.
def fakultet(n):
if n <= 1: # basfall
return 1
return n * fakultet(n - 1) # mindre problem
fakultet(4) → 4 · fakultet(3) → 4 · 3 · fakultet(2) → 4 · 3 · 2 · fakultet(1) → 4 · 3 · 2 · 1 = 24.
Kod
# Rekursion lyser när datan själv är nästlad — träd, kataloger, JSON, grafer
def djup(obj):
"""Hur många nivåer nästlade listor?"""
if not isinstance(obj, list):
return 0
return 1 + max((djup(x) for x in obj), default=0)
print(djup([1, [2, [3, [4]]]])) # 3
# Förkunskapsträd — samma mönster som plattformens lärvägar
def alla_forkunskaper(slug, graf, sedda=None):
sedda = sedda if sedda is not None else set()
for f in graf.get(slug, []):
if f not in sedda:
sedda.add(f)
alla_forkunskaper(f, graf, sedda)
return sedda
g = {"backprop": ["neuronnat"], "neuronnat": ["matriser", "derivata"], "matriser": ["vektorer"]}
print(sorted(alla_forkunskaper("backprop", g)))
# ['derivata', 'matriser', 'neuronnat', 'vektorer']
Varning: Python klarar ~1 000 nivåer djup rekursion. För djupa strukturer eller enkla loopar är iteration bättre. Fibonacci rekursivt utan memoisering är dessutom exponentiellt långsamt — functools.cache löser det.
Behärskning innebär
- Skriver en rekursiv funktion med basfall
- Följer anropsstacken
- Känner igen när rekursion är naturligt
Logga in för att göra övningarna och bygga upp din behärskning.