Göm menyn

Iteration och rekursion

Vi har tidigare använt upprepningar över tal med iteration (konstruktionen for) och rekursion (funktioner som anropar sig själva). Nu ska vi titta på metoder för att upprepa något för varje element i en lista.

Hur kan man tänka?

Iteration

Iteration handlar om att hela tiden ha ett delresultat och uppdatera det varje upprepning.

Rekursion

Rekursion handlar om att försöka omvandla det existerande problemet till ett lite mindre problem och starta om, till dess att problemet är så litet att det är trivialt.

I den här bilden visar vi hur man räknar ut längden av listan ['a', 'b', 'c'] på ett rekursivt sätt.

Mallar för upprepning över en talserie

z = Startvärde för beräkning (0 om vi använder operationen + för att kombinera element, 1 om vi använder operationen *). op = Operation för att kombinera ihop resultatet, t.ex. + eller *.

Mallar för upprepning över en lista

op = Operation för att kombinera ihop resultatet,

Utökade mallar för upprepning över en lista med villkor

op1, op2 = operationer som ska utföras på elementen i listan. cond = villkor som avgör vilken av operationerna op1 eller op2 som ska användas.

Exempel som använder den utökade mallen

Vi vill ha en funktion count som kan räkna hur många gånger ett visst element förekommer i en lista. Här ser vi ett körexempel som räknar hur många gånger heltalet 1 förekommer i listan:

Olika sorters upprepning

Upprepning med for

Dokumentation

Upprepning med while

Dokumentation

Vi ska titta på några typiska situationer där man använder upprepning. Dessa kan fungera som mallar när man vill göra liknande saker. Det finns en tydlig poäng med att följa ett mönster, eftersom det ökar kodens läsbarhet.

Loop med vaktpost (eng. sentinel loop)

Loop med test i slutet

Loop med test i mitten

Loop som läser in från en fil

Innehållet i data.txt:


Sidansvarig: Peter Dalenius
Senast uppdaterad: 2016-08-15