Rekursion: varför? Problem delas upp i mindre bitar algoritm för att lösa problemet erhålls från problemformuleringen



Relevanta dokument
Föreläsning 5: Rekursion

Konsten att multiplicera (stora) heltal

ATT KUNNA TILL. MA1050 Matte Grund Vuxenutbildningen Dennis Jonsson

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Programexempel: tärningsspel

Kapitel 6. f(x) = sin x. Figur 6.1: Funktionen sin x. 1 Oinas-Kukkonen m.fl. Kurs 6 kapitel 1

Lathund, procent med bråk, åk 8

DOP-matematik Copyright Tord Persson. Bråktal Läs av vilka tal på tallinjen, som pilarna pekar på. Uppgift nr

Föreläsning 8: Räkning. Duvhålsprincipen. Kombinatorik

Antal grodor i varje familj Antal hopp tills alla bytt plats Ökning

Översikt. Rapport från skolverket. Förändring av matematikprestationerna Grundtankar bakom Pixel

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Erfarenheter från ett pilotprojekt med barn i åldrarna 1 5 år och deras lärare

Laborativ matematik som bedömningsform. Per Berggren och Maria Lindroth

Ekvationssystem, Matriser och Eliminationsmetoden

Kvinnor som driver företag pensionssparar mindre än män

Exempel på tentamensuppgifter i LMA100, del 1

Ha det kul med att förmedla och utveckla ett knepigt område!

Syftet med en personlig handlingsplan

Elektronen och laddning

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

arbetslösa står utan ersättning oroväckande hög ökning på fyra år

När jag har arbetat klart med det här området ska jag:

Invisible Friend Senast uppdaterad

Hävarmen. Peter Kock

Gemensam problemlösning. Per Berggren och Maria Lindroth

2D1310, 2D1311 Programmeringsteknik Tentamen (1p) 3 maj 2001, kl

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Mätningar på op-förstärkare. Del 3, växelspänningsförstärkning med balanserad ingång.

konstanterna a och b så att ekvationssystemet x 2y = 1 2x + ay = b 2 a b

Individuellt Mjukvaruutvecklingsprojekt

Gruppindelning JUNIOR

Övningshäfte Algebra, ekvationssystem och geometri

Tentamen OOP

Lösningar till Tentamen i Matematisk Statistik, 5p 22 mars, Beräkna medelvärdet, standardavvikelsen, medianen och tredje kvartilen?

Sid i boken Rekrytering. Författare Annica Galfvensjö, Jure Förlag

Frågor i ansökan om statsbidrag för läxhjälp år 2016 skolhuvudmän

Facit åk 6 Prima Formula

L(9/G)MA10 Kombinatorik och geometri Gruppövning 1

Lite skoj - typ. 5DV085 - Programspråk. Jan Erik Moström, Department of Computing Science, Umeå University - jem@cs.umu.se

Snabbslumpade uppgifter från flera moment.

Har vi lösningen för en bättre hemtjänst? Självklart.

Modul 6: Integraler och tillämpningar

Får nyanlända samma chans i den svenska skolan?

EN BÄTTRE KREDITAFFÄR

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

SANNOLIKHET. Sannolikhet är: Hur stor chans (eller risk) att något inträffar.

SF1620 Matematik och modeller

Abstrakt. Resultat. Sammanfattning.

Vad vill jag bli, och vad vill jag ha gjort?

Koll på cashen - agera ekonomicoach!

Kampanj kommer från det franska ordet campagne och innebär att man under en tidsbegränsad period bedriver en viss verksamhet.

Anhörigas upplevelser av en hjärtstoppssituation och att själv bli omhändertagen ett vårdande förhållningssätt inom ambulanssjukvård

Identiteter och behörigheter i molnet och BYOD

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Jo, Den Talande Boken har så många möjligheter inbyggda, att den kan användas från förskoleklassen och ända upp på högstadiet.

Elevinflytande i planeringen av undervisningen. BFL-piloter Mats Burström

FIRST LEGO League. Göteborg 2012

Så här påverkar villkorsändringen. Avtalspension SAF-LO. Möjlighet till återbetalningsskydd

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

Uppdrag: Huset. Fundera på: Vilka delar i ditt hus samverkar för att elen ska fungera?

Föreläsning 6. Rekursion och backtracking

Resultat av enkät till assistansberättigade

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

När du som vårdpersonal vill ta del av information som finns hos en annan vårdgivare krävs det att:

Undersökning: Äggkonsumtion och äggtraditioner påsken 2012

Hälsobarometern. Första kvartalet Antal långtidssjuka privatanställda tjänstemän, utveckling och bakomliggande orsaker

Vad är det och hur definierar vi en Biblioteksfunktioner (math) Top-down-programmering lokala globala variabler Arrays som in-parametrar

Träning i bevisföring

Utredning av hyressättning i vård- och omsorgsboende för personer med funktionsnedsättning i Tyresö kommun

Facit med lösningsförslag kommer att anslås på vår hemsida Du kan dessutom få dem via e-post, se nedan.

Statsbidrag för läxhjälp till huvudmän 2016

Innehållet i detta häfte är sekretessbelagt t o m den 9 juni 2006.

Begränsad uppräkning av den nedre skiktgränsen för statlig inkomstskatt för 2017

Lokal pedagogisk planering i matematik för årskurs 8

Sammanfattning på lättläst svenska

F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander

3. Olle skriver ned ett visst antal heltal mellan 10 och 25. Talens medelvärde är 18. Hur många är talen? (1) Medelvärdet av de tre första talen som O

Omvandla Vinklar. 1 Mattematiskt Tankesätt

Läraren som moderator vid problemlösning i matematik

Antagna av Kommunstyrelsen Kvalitetsgarantier Detta kan du som brukare förvänta dig av Hemtjänsten i Eksjö kommun

NATIONELLT KURSPROV I MATEMATIK KURS B HÖSTEN Tidsbunden del

Föreläsning 13. Rekursion

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Information om trygghetslarm

Rekursion och induktion för algoritmkonstruktion

Rätt till heltid i Stockholms stad Skrivelse från Sara Pettigrew och Åsa Jernberg (båda MP)

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen i Programmering grundkurs och Programmering C

H Formulär - ADL H90. Probandnummer: Intervjuare: Datum (år/månad/dag): / /

Grundläggande programmering med C# 7,5 högskolepoäng

Idag: Dataabstraktion

"if"-satsen. Inledande programmering med C# (1DV402)

Något om permutationer

Del 1, trepoängsproblem

Gruppenkät. Lycka till! Kommun: Stadsdel: (Gäller endast Göteborg)

Socialstyrelsens författningssamling

Frågor och svar angående de nya nationella övergångsbestämmelserna. Fråga 1: Får en amatör byta förening fler gånger på en säsong?

Övningshäfte i matematik för. Kemistuderande BL 05

Transkript:

Rekursion: varför Problem delas upp i mindre bitar algoritm för att lösa problemet erhålls från problemformuleringen Exempel på problem som kan lösas med rekursion: Beräkningar, t.ex. upphöjt, Fibonacci-tal, faktorisering, fakultet Sökproblem, t.ex. schack Tornet i Hanoi De flesta svårare problem Många svåra problem får elegant lösning med rekursion

Upphöjt Rekursion innebär att en metod anropar sig själv Exempel: beräkna upphöjt-funktionen, a b Vi använder: a 0 = 1 a b = a a b 1 Problemet delas därmed upp i två mindre: Delproblem 1: beräkna a b 1 Delproblem 2: multiplicera med a

Upphöjt Exempel: beräkna upphöjt-funktionen, a b Vi använder: a b = a a b 1 a 0 = 1 public static int upphojt(int a, int b) { if (b == 0) return 1; else return a * upphojt(a, b - 1); } Rekursion

Primtalsfaktorisering Problem: Givet ett positivt heltal n, Primtalsfaktorisera n Varje primtalsfaktor > 1 ska anges så många gånger som n kan delas med faktorn Exempelkörning: Mata in ett tal: 60 Faktorer: 2 2 3 5

Primtalsfaktorisering Idé: Om n inte har någon mindre primtalsfaktor, skriv ut n Om n har någon primtalsfaktor f, skriv ut f och primtalsfaktorisera n / f

Primtalsfaktorisering Idé: Om n inte har någon mindre primtalsfaktor, skriv ut n Om n har någon primtalsfaktor f, skriv ut f och primtalsfaktorisera n / f Denna lösning är rekursiv Delproblem 1: hitta en primtalsfaktor Delproblem 2: primtalsfaktorisera ett mindre tal Rekursion

Primtalsfaktorisering Idé: Om n inte har någon mindre primtalsfaktor, skriv ut n Om n har någon primtalsfaktor f, skriv ut f och primtalsfaktorisera n / f Denna lösning är rekursiv Delproblem 1: hitta en primtalsfaktor Delproblem 2: primtalsfaktorisera ett mindre tal Delproblem 1: För varje k från 2 till n, testa om k delar n: if ((n % k) == 0) Rekursion

Primtalsfaktorisering class PrimtalsFaktorisering { private static int hittafaktor(int n) { for (int k = 2; k < n; k++) if ((n % k) == 0) return k; return n; } } public static void faktorisera(int n) { if (n > 1) int faktor = hittafaktor(n); Std.out.println(faktor); faktorisera(n / faktor); } }

Tornen i Hanoi Utgångsläge: 3 pinnar 64 guldskivor av olika storlekar på pinne 1 Storleksordning, den största underst Mål: Få över alla skivor till pinne 3

Tornen i Hanoi Regler för att flytta skivor: Den översta skivan på valfri pinne får flyttas till annan valfri pinne MEN: Ingen skiva får någonsin ligga på en mindre skiva

Tornen i Hanoi Om vi bara har 2 skivor:

Tornen i Hanoi Om vi har 3 skivor:

Tornen i Hanoi Om vi har n skivor: rekursiv lösning n 1 skivor

Tornen i Hanoi Rekursiv lösning För att flytta ett torn av n skivor från a till c, med b som hjälppinne (1) Flytta n 1 skivor från a till b; c är hjälppinne (2) Flytta 1 skiva från a till c (3) Flytta n 1 skivor från b till c; a är hjälppinne (1) (2) (3) 2 mindre delproblem rekursion

Tornen i Hanoi Rekursiv lösning class Hanoi { public static void flytta(int antal, int fran, int hjalp, int till) { if (antal > 0) { flytta(antal - 1, fran, till, hjalp); Std.out.println(fran + " -> " + till); flytta(antal - 1, hjalp, fran, till); } } } public static void main(string[] args) { Std.out.println("Antal brickor:"); int antal = Std.in.readInt(); flytta(antal, 1, 2, 3); }

Tornen i Hanoi Tillbaka till Hanoi: hur lång tid tar det T(n) = antal förflyttningar som behövs för att få n brickor från en pinne till en annan T(1) = 1 (för att få 1 bricka från en pinne till en annan, behövs bara 1 förflyttning) T(n) = T(n 1) + T(1) + T(n 1) (för att flytta n brickor, gör vi tre saker: flyttar n 1 brickor, flyttar 1 bricka, och flyttar n 1 brickor igen) Har lösning T(n) = 2 n 1

Tornen i Hanoi Tillbaka till Hanoi: hur lång tid tar det T(64) = 2 64 1 = 18 446 744 073 709 551 615 Om munkarna flyttar en skiva i sekunden, tar det 5.8 miljarder sekel att flytta alla skivorna ca 45 gånger längre tid än universums ålder (13 miljarer år enl. NASA:s Wilkinson Microwave Anisotropy Probe (WMAP) projekt)

Ett sätt att lösa problem Dela upp problemet i mindre delproblem Lös delproblemen, var för sig Kombinera lösningarna till en lösning för det ursprungliga problemet

Ett sätt att lösa problem Dela upp problemet i mindre delproblem Lös delproblemen, var för sig Med rekursion Kombinera lösningarna till en lösning för det ursprungliga problemet Om delproblemen är av samma typ men mindre