Rekursion in för

IDA - Institutionen för datavetenskap

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

Om man beräknar en funktion med hjälp av iteration har man hela tiden ett aktuellt delresultat. Man börjar med ett startvärde, och för varje steg uppdaterar man det nuvarande resultatet. Vi kan till exempel beräkna längden av en lista på följande sätt:

deflength(seq): result=0forelementinseq: result+=1returnresult

Vi börjar alltså med resultatet 0, och för varje element vi hittar i sekvensen adderar vi 1 till resultatet. Till slut returnerar vi resultatet.

Man kan också beräkna fakultetsfunktionen på följande sätt:

deffactorial(n): result=1forkinrange(2, n+1): result*=kreturnresult

Här har vi börjat med resultatet 1, och sedan multiplicerat med alla tal mellan 2 och n, ett i taget.

Vi kommer att återvända till iteration senare, men först ska vi göra en djupdykning i rekursion.

Rekursion: Ett problem där det förenklar

Vi har tittat en aning på rekursion förut, men då i ett sammanhang där

  Rekursive funktioner

En rekursiv funktion er kendetegnet ved, at den kalder sig selv. Men som det mest v�sentlige, er rekursive funktioner udtryk for en probleml�sning, hvor delproblemerne ligner det overordnede problem.

Vi introducerer rekursion i dette kapitel. I en senere lektion, startende i kapitel 32, vender vi tilbage til rekursion med fornyet styrke.

 

  Rekursive funktioner
Indhold   Op Forrige N�ste   Slide Aggregerede slides    Stikord Programindeks Opgaveindeks 

F�rst g�r vi os de essentielle iagttagelser om rekursion, problemer som har rekursivt forekommende delproblemer:

En rekursiv funktion kalder sig selv

Rekursive funktioner er nyttige n�r et problem kan opdeles i delproblemer, hvoraf nogle har samme natur som problemet selv

Som det f�rste eksempel programmerer vi fakultetsfunktionen. Hvis vi af bekvemmelighed her kalder fakultetsfunktionen for f, g�lder at f(n) = n . (n-1) . (n-2) . 2 . 1. Dette kan ogs� udtrykkes rekursivt som f�lger:

  • f(n) = n.f(n-1)    for n > 0
  • f(0) = 1
Denne rekursive for

Bästa svaret

Rekursion och rekursivitet är mycket bredare termer. I lingvistik hänvisar de till förmågan hos en språklig enhet eller regel att upprepas (vissa skulle argumentera till oändlighet). Koordinering och underordning, sammanfogning och inbäddning kan alla vara exempel på rekursion.

Till exempel för underordning: När jag såg filmen gick jag till affären. Efter att jag såg filmen, efter att jag gick till affären, åt jag pizza.

Samordningen är ännu enklare: Jag gick till affären och såg en film. Jag gick till affären och såg en film och åt pizza. Jag gick till affären och såg en film och åt pizza och gick till djurparken.

Rekursion sker inte bara på klausulnivå på många språk; på engelska kan vi bädda in prepositioner i varandra: Jag satt på stolen i rummet bredvid bordet nära fönstret.

Vad som kan samordnas ändras också från språk till språk. På engelska kan vi använda &#;och&#; för att samordna satser, substantiv och verb, men på japanska kan と / to / endast användas för att samordna substantiv. Det är fortfarande rekursivt men kan &#;inte användas rekursivt på verbnivå: boku-wa nihon-to inu-to mizu-o mi-masu 1sg-nom japan-and dog-and water-acc see-pres-l

Rekursion

Räkneexempel och förklaringar för rekursion:

Exempel: Ange a_4 i talföljden a_n = a_{n-1} + 2 , a_1 = 3

Svar: 9

Förklaring: Regeln a_n = a_{n-1} + 2 visar hur vi beräknar  ett tal i talföljden utifrån det föregående talet. Vill vi räkna ut a_2 så kan vi stoppa in n=2 i regeln, och då får vi: 

 a_2 = a_{} + 2 = a_1 + 2.

 Men a_1 vet vi vad det är, den är given i uppgiften! Om vi stoppar in a_1 = 3 så får vi

 a_2 = a_1 + 2 = 3 + 2 = 5.

 nu kan vi stoppa in n=3 i regeln, och då får vi

a_3 = a_{} + 2 = a_2 + 2.

 men vi räknade ju precis ut a_2! Om vi stoppar in a_2 = 5 så får vi

 a_3 = a_2 + 2 = 5 + 2 = 7.

 Om vi gör detta ytterligare en gång  kommer vi till a_4. Vi stoppar in n=4 i regeln:

a_4 = a_{} + 2 = a_3 + 2 = 7 + 2 = 9.

Alltså är svaret 9!

Notera att vi behövde ha a_1 = 3 som del av definitionen för talserien &#; rekursion fungerar bara om man har ett sådant basfall.

Exempel: Ange a_3 i talföljden a_n = a_{n-1} \cdot n , a_1 = 1

Svar: 6

Förklaring: Regeln  a_n = a_{n-1} \cdot n ger hur man får ett tal i talföljden utifrån det förra talet. Vi börjar med att stoppa in n=2 i rege

Recursion is a powerful programming concept that can solve complex problems elegantly and efficiently. However, it can also be a source of confusion for many programmers, especially those new to the concept. In this comprehensive guide, we&#;ll dive deep into the world of recursion, exploring what it is, when to use it, and how to implement it effectively in your code.

What is Recursion?

Recursion is a programming technique where a function calls itself to solve a problem. It&#;s based on the principle of breaking down a complex problem into smaller, more manageable subproblems. Each recursive call works on a smaller instance of the original problem until a base case is reached, at which point the function stops calling itself and starts returning results back up the chain of calls.

The key components of a recursive function are:

  1. Base case: The condition that stops the recursion
  2. Recursive case: The part where the function calls itself with a modified input

When to Use Recursion

Recursion is particularly useful in scenarios where a problem can be naturally divided into smaller, similar subproblems. Here are some situations where recursion shines:

1. Tree-like Data S