Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avBernt Lund
1
För utveckling av verksamhet, produkter och livskvalitet. Rekursiva algoritmer, en annan sort tänkande -Hur -När -Bra/Dåligt (kap 7)
2
För utveckling av verksamhet, produkter och livskvalitet. Rekursion ? En rekursiv metod är en metod som anropar sig själv. Liknar loopar / iterationer Rekursion är ett sätt att lösa ett problem genom att dela problemmet i flera identiska men mindre subproblem, dvs. metoden anropar sig själv med ” ett mindre argument”. Summan av 1+2+3+4+5 +......+n
3
För utveckling av verksamhet, produkter och livskvalitet. Exempel public static int sumOf(int n) { if(n==1) return 1; else return sumOf(n-1) +n; } !! basfall Se till att den rekursiva anropet alltid leder till basfallet
4
För utveckling av verksamhet, produkter och livskvalitet. Det största gemensamma divisorn (greatest common divisor) tilllämpas i krypteringsalgoritmer public static long gcd (long a,long b) { if(b==0) return a; else if(a>=b) return gcd(a-b,b); else return gcd(b,a); } public static long gcd(long a,long b) { if(b==0) return a; else return gcd(b,a%b); }
5
För utveckling av verksamhet, produkter och livskvalitet. En enkel lösning till ett komplicerat problem ”the towers of Hanoi ” En grupp munkar på 1800 talet fick i uppdrag att flytta 64 skivor guld (med olika diameter) från ett torn till ett annat. När arbetet var klart skulle jorden gå under. Följande regler skulle följas: 1)Flytta en disk i taget 2)Ingen skiva med större diameter får ligga över en med mindre. 3)En temporärt torn kan användas så länge regel 1och 2 följs. Hur lång tid tar det att slutföra arbetet om det tar 1 min för varje flytt?
6
För utveckling av verksamhet, produkter och livskvalitet. Towers of Hanoi, lösning
7
För utveckling av verksamhet, produkter och livskvalitet. Implementation void hanoi(int n, char from, char to, char h){ if(n>0){ hanoi(n-1,from,h,to); System.out.println(from+" --> "+to); hanoi(n-1,h,to,from); }
8
För utveckling av verksamhet, produkter och livskvalitet. En dålig lösning till ett enkelt problem På 1300- talet hittar Leonardo Fibonacci en sekvens av tal för att modelera antalet avkommer från ett kanin par. 1 1 2 3 5 8 13........ F0=1 F1=1 F2=2 F3=3 F4=5 Fn=Fn-1+Fn-2
9
För utveckling av verksamhet, produkter och livskvalitet. Rekursiv algoritm för fibonacci int fibonacci(n) { if(n==0)|| (n==1) return 1 else return fibonacci(n-1)+fibonacci(n-2) } Tidskomplexitet
10
För utveckling av verksamhet, produkter och livskvalitet. Dinamisk programmering Princip: Beräkna ny värde genom att använda de senaste beräknade värde public static int fibonacci (int n) { if(n<=1) return 1; else { int first=1; int next=1;int fibTal=0; for (int i=1;i<n;i++) { fibTal=first+next; first=next; next=fibTal; } return fibTal; }
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.