20
Recursion CMSC 132, Summer 2016 Object-Oriented Programming II Anwar Mamat

Recursion - UMD

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Recursion - UMD

Recursion

CMSC132,Summer2016Object-OrientedProgrammingII

AnwarMamat

Page 2: Recursion - UMD

Recursion

• Whenonefunctioncallsitselfdirectlyorindirectly

• amethodwherethesolutiontoaproblemdependsonsolutionstosmallerinstancesofthesameproblem.

Page 3: Recursion - UMD

Factorial

5!=5*4!

4=4*3!

3!=3*2!

2!=2*1!

1!=1

2*1

3 *2

4 *65 *24=120

5!=?

Definition:

Page 4: Recursion - UMD

GreatestCommonDivisor

• gcd:FindlargestintegerdthatevenlydividesintopandqEuclid'salgorithm.[300BCE]

Page 5: Recursion - UMD

GreatestCommonDivisor

• gcd:FindlargestintegerdthatevenlydividesintopandqEuclid'salgorithm.[300BCE]

Page 6: Recursion - UMD

TowersofHanoi

Page 7: Recursion - UMD

TowersofHanoi• Moveallthediscsfromtheleftmostpegtotherightmostone.– Onlyonediscmaybemovedatatime.– Adisccanbeplacedeitheronemptypegorontopofalargerdisc

Page 8: Recursion - UMD

TowersofHanoiLegend

• Q.Isworldgoingtoend(accordingtolegend)?– 64goldendiscson3diamondpegs.–Worldendswhencertaingroupofmonksaccomplishtask.

• Q.Willcomputeralgorithmshelp

Page 9: Recursion - UMD

Let’smovedisks

A B C

?

Page 10: Recursion - UMD

Moveonedisk

A B C

Page 11: Recursion - UMD

Movetwodisks

A B C

Page 12: Recursion - UMD

Movethreedisks

A B C

Page 13: Recursion - UMD

Movefourdisks

A B C

Page 14: Recursion - UMD

Movendisks

1.Moven-1disksfromA->B

2.MovethelargestdisktoC

3.Moven-1disksfromB->C

A B C

Page 15: Recursion - UMD

TowersofHanoi:RecursiveSolutionpublic class TowersOfHanoi {

public static void solve(int n, String A, String B, String C) {if (n == 1) {

System.out.println(A + " -> " + C);} else {

solve(n - 1, A, C, B);System.out.println(A + " -> " + C);solve(n - 1, B, A, C);

}}public static void main(String[] args) {

int discs = 3;solve(discs, "A", "B", "C");

}}

A B C

Page 16: Recursion - UMD

Remarkablepropertiesofrecursivesolution

• Takes2n stepstosolvendiscproblem.• Takes585billionyearsforn=64(atrateof1discpersecond).

• Reassuringfact:anysolutiontakesatleastthislong

Page 17: Recursion - UMD

FibonacciNumberFibonaccinumbers:0,1,1,2,3,5,8,13,21,34

Page 18: Recursion - UMD

FibonacciNumberFibonaccinumbers:0,1,1,2,3,5,8,13,21,34

Page 19: Recursion - UMD

InefficientRecursionFibonaccinumbers:0,1,1,2,3,5,8,13,21,34

Page 20: Recursion - UMD

Memoized VersionoftheFibonaccipublic Map<Integer, Integer> fibo;

public int fib(int n){

int f1=0,f2=0;

if( (n == 1)|| (n == 2)) return 1;

else{

if(fibo.containsKey(n-1)){

f1 = fibo.get(n-1);

}else{

f1 = fib(n-1);

fibo.put(n-1,f1);

}

if(fibo.containsKey(n-2)){

f2 = fibo.get(n-2);

}else{

f2 = fib(n-2);

fibo.put(n-2,f2);

}

return f2+f1;

}