Förstå rekursion

Datastrukturer och algoritmer i Python

Miriam Antona

Software engineer

Definition

  • En funktion som anropar sig själv
  • Kan användas i nästan alla situationer där vi använder loopar
    • ersätt loopar med rekursion
  • Kan lösa problem som verkar komplexa vid första anblicken
Datastrukturer och algoritmer i Python

Exempel – fakultet

$n!$

Datastrukturer och algoritmer i Python

Exempel – fakultet

$n!=n$ · $(n-1)$ · $(n-2)$ · $...$ · $1$

$5!=$ $5$ · $4$ · $3$ · $2$ · $1=120$

def factorial(n):
  result = 1
  while n > 1:
    result = n * result
    n -= 1
  return result
factorial(5)
120
Datastrukturer och algoritmer i Python

Exempel – fakultet med rekursion

$n!= n$ · $(n-1)!$

def factorial_recursion(n):
  return n * factorial_recursion(n-1)
  • Körs för evigt!
Datastrukturer och algoritmer i Python

Exempel – identifiera basfallet

  • Lägg till ett villkor
    • förhindrar att algoritmen körs för evigt
  • Basfall för fakultet -> $n=1$
def factorial_recursion(n):
  if n == 1:

return 1
else:
return n * factorial_recursion(n-1)
print(factorial_recursion(5))
120
Datastrukturer och algoritmer i Python

Hur rekursion fungerar

  • Datorn använder en stack för att hålla reda på funktionerna
    • Anropsstack
Datastrukturer och algoritmer i Python

Hur rekursion fungerar

  • factorial(5) startar
  • Innan factorial(5) är klar -> factorial(4) startar
  • Innan factorial(4) är klar -> factorial(3) startar

En bild av en kö med ett element som representerar en funktion.

Datastrukturer och algoritmer i Python

Hur rekursion fungerar

  • factorial(5) startar
  • Innan factorial(5) är klar -> factorial(4) startar
  • Innan factorial(4) är klar -> factorial(3) startar
  • Innan factorial(3) är klar -> factorial(2) startar

En bild av en kö med två element som representerar två funktioner.

Datastrukturer och algoritmer i Python

Hur rekursion fungerar

  • factorial(5) startar
  • Innan factorial(5) är klar -> factorial(4) startar
  • Innan factorial(4) är klar -> factorial(3) startar
  • Innan factorial(3) är klar -> factorial(2) startar
  • Innan factorial(2) är klar -> factorial(1) startar

En bild av en kö med tre element som representerar tre funktioner.

Datastrukturer och algoritmer i Python

Hur rekursion fungerar

  • factorial(5) startar
  • Innan factorial(5) är klar -> factorial(4) startar
  • Innan factorial(4) är klar -> factorial(3) startar
  • Innan factorial(3) är klar -> factorial(2) startar
  • Innan factorial(2) är klar -> factorial(1) startar

En bild av en kö med fyra element som representerar fyra funktioner.

Datastrukturer och algoritmer i Python

Hur rekursion fungerar

  • factorial(1) är klar
    • returnerar 1
  • factorial(2) är klar

En bild av en kö med fyra element som representerar fyra funktioner.

Datastrukturer och algoritmer i Python

Hur rekursion fungerar

  • factorial(1) är klar
    • returnerar 1
  • factorial(2) är klar
    • returnerar 2

En bild av en kö med fyra element som representerar fyra funktioner. Den sista funktionen visas med sitt returvärde.

Datastrukturer och algoritmer i Python

Hur rekursion fungerar

  • factorial(1) är klar
    • returnerar 1
  • factorial(2) är klar
    • returnerar 2
  • factorial(3) är klar
    • returnerar 6

En bild av en kö med tre element som representerar tre funktioner.

Datastrukturer och algoritmer i Python

Hur rekursion fungerar

  • factorial(1) är klar
    • returnerar 1
  • factorial(2) är klar
    • returnerar 2
  • factorial(3) är klar
    • returnerar 6
  • factorial(4) är klar
    • returnerar 24

En bild av en kö med två element som representerar två funktioner.

Datastrukturer och algoritmer i Python

Hur rekursion fungerar

  • factorial(1) är klar
    • returnerar 1
  • factorial(2) är klar
    • returnerar 2
  • factorial(3) är klar
    • returnerar 6
  • factorial(4) är klar
    • returnerar 24
  • factorial(5) är klar
    • returnerar 120

En bild av en kö med ett element som representerar en funktion.

Datastrukturer och algoritmer i Python

Hur rekursion fungerar

  • factorial(1) är klar
    • returnerar 1
  • factorial(2) är klar
    • returnerar 2
  • factorial(3) är klar
    • returnerar 6
  • factorial(4) är klar
    • returnerar 24
  • factorial(5) är klar
    • returnerar 120

En bild av en tom kö.

Datastrukturer och algoritmer i Python

Dynamisk programmering

  • Optimeringsteknik
  • Används främst vid rekursion
  • Kan minska komplexiteten hos rekursiva algoritmer
  • Används för:
    • Problem som kan delas upp i mindre delproblem
    • Delproblem som överlappar
  • Lösningar på delproblem sparas, vilket undviker omberäkning
    • Memoization
Datastrukturer och algoritmer i Python

Nu kör vi en övning!

Datastrukturer och algoritmer i Python

Preparing Video For Download...