c omp 110 401
play

C OMP 110/401 R ECURSION Instructor: Prasun Dewan P REREQUISITES - PowerPoint PPT Presentation

C OMP 110/401 R ECURSION Instructor: Prasun Dewan P REREQUISITES Conditionals 2 R ECURSION English definition Return (Oxford/Webster) procedure repeating itself indefinitely or until condition met, such as grammar rule (Webster)


  1. C OMP 110/401 R ECURSION Instructor: Prasun Dewan

  2. P REREQUISITES  Conditionals 2

  3. R ECURSION  English definition  Return (Oxford/Webster)  procedure repeating itself indefinitely or until condition met, such as grammar rule (Webster)  English examples  adequate : satisfactory  satisfactory : adequate  My definition: recursion : recursion  Mathematics  expression giving successive terms of a series (Oxford)  Programming  Method calling itself.  On a smaller problem.  Alternative to loops. 3

  4. F ACTORIAL ( N ) public static int factorial( int n) { int product = 1; while (n > 0) { product *= n; n -= 1; } return product; 1*2*3*…*n } public static void main (String[] args) { while ( true ) { // loop condition never false int n = Console.readInt(); if (n < 0) break; System.out.println("factorial = " + factorial(n)); } } 4

  5. D EFINING F ACTORIAL ( N ) Product of the first n numbers 1*2*3*…*n factorial(0) = 1 factorial(1) = 1 = 1*factorial(0) factorial(2) = 2*1 = 2*factorial(1) factorial(3) = 3*2*1 = 3*factorial(2) factorial(4) = 4*3*2*1 = 4*factorial(3) factorial(n) = n*n- 1*…*1 = n*factorial(n-1) 5

  6. D EFINING F ACTORIAL ( N ) factorial(n) = 1 if n == 0 factorial(n) = n*factorial(n-1) if n > 0 6

  7. I MPLEMENTING F ACTORIAL ( N ) (E DIT ) factorial(n) = 1 if n == 0 factorial(n) = n*factorial(n-1) if n > 0 public static int factorial( int n) { … } 7

  8. I MPLEMENTING F ACTORIAL ( N ) factorial(n) = 1 if n == 0 factorial(n) = n*factorial(n-1) if n > 0 n < 0 ? public static int factorial ( int n) { if (n == 0) return 1; Function must if (n > 0) return something for return n*factorial(n-1); all cases } Multiple return Early return 8

  9. I MPLEMENTING F ACTORIAL ( N ) factorial(n) = 1 if n == 0 factorial(n) = n*factorial(n-1) if n > 0 factorial(n) = factorial(-n) if n < 0 Base public static int factorial( int n) { (terminating) if (n == 0) case return 1; else if (n < 0) Recursive return factorial(-n); Reduction Steps else return n*factorial(n-1); } 9

  10. R ECURSIVE M ETHODS  Should have base case(s)  Recurse on smaller problem(s)  recursive calls should converge to base case(s) 10

  11. G ENERAL F ORM OF A R ECURSIVE M ETHOD if (base case 1 ) return solution for base case 1 else if (base case 2) return solution for base case 2 …. else if (base case n) return solution for base case n else if (recursive case 1) do some preprocessing recurse on reduced problem do some postprocessing … else if (recursive case m) do some preprocessing recurse on reduced problem do some postprocessing 11

  12. R ECURSION VS . L OOPS (I TERATION ) public static int factorial( int n) { int product = 1; while (n > 0) { Implementation follows from product *= n; definition n -= 1; } return product; } public static int factorial( int n) { if (n == 0) return 1; else if (n < 0) return factorial(-n); else return n*factorial(n-1); } 12

  13. T RACING R ECURSIVE C ALLS Locals Call Stack 13

  14. T RACING R ECURSIVE C ALLS Invocation Invocation n n return value return value factorial(1) factorial(0) 1 0 ? ? factorial(1) factorial(2) 1 2 ? ? factorial(2) 2 ? 14

  15. T RACING R ECURSIVE C ALLS Call Stack Locals 15

  16. T RACING R ECURSIVE C ALLS Invocation Invocation Invocation n n n return value return value return value factorial(0) factorial(0) factorial(0) 0 0 0 1 1 1 factorial(1) factorial(1) factorial(1) 1 1 1 1 1 ? factorial(2) factorial(2) factorial(2) 2 2 2 2 ? ? 16

  17. R ECURSION P ITFALLS factorial(2) public static int factorial ( int n) { return n*factorial(n-1); } 2*factorial(1) 1*factorial(0) 0*factorial(-1) -1*factorial(-2) Infinite recursion! (stack overflow) No base case … 17

  18. R ECURSION P ITFALLS factorial(2) public static int factorial ( int n) { if (n == 0) return 1; else if (n < 0) factorial(3)/3 return factorial(-n); else return factorial(n+1)/n; } factorial(4)/4 factorial(5)/5 factorial(6)/6 Infinite recursion! Recurses on bigger problem … 18

  19. R ECURSIVE F UNCTIONS WITH M ULTIPLE P ARAMETERS power(base, exponent) base exponent base*base*base*…*base Exponent # of times power(0, exponent) = 0 power(1, exponent) = 1 power(2, exponent) = 2*2*…*2 (exponent times) power(3, exponent) = 3*3*…*3 (exponent times) No pattern! 19

  20. R ECURSIVE F UNCTIONS WITH M ULTIPLE P ARAMETERS (E DIT ) power(base, exponent) base exponent base*base*base*…*base Exponent # of times 20

  21. R ECURSIVE F UNCTIONS WITH M ULTIPLE P ARAMETERS (E DIT ) power(base, exponent) base exponent base*base*base*…*base Exponent # of times power(base, 0) = 1 power(base, 1) = base*1 = base*power(base, 0) power(base, 2) = base*base*1 = base*power(base, 1) power(base, exponent) = base*power(base, exponent-1) 21

  22. D EFINING POWER ( BASE , EXPONENT ) power(base, exponent) = 1 if exponent <= 0 power(base, exponent) = base*power(base, exponent-1) if exponent > 0 public static int power( int base, int exponent) { if (n <= 0) return 1 ; else return base * power(base, exponent-1); } 22

  23. R ECURSIVE P ROCEDURES : GREET ( N ) greet(0) greet(1) greet(2) greet(n) print “hello” print “hello” print “hello” print “hello” print “hello” n times print “hello” 23

  24. D EFINING GREET ( N ) (E DIT ) greet(0) greet(1) greet(2) greet(n) print “hello” print “hello” print “hello” print “hello” print “hello” n times print “hello” 24

  25. D EFINING GREET ( N ) greet(0) greet(1) greet(2) greet(n) print “hello” print “hello” print “hello” print “hello” print “hello” n times do nothing; greet(0); print “hello”; print “hello” greet(1); print “hello”; greet(n-1); 25 print “hello”;

  26. D EFINING GREET ( N ) greet(n) do nothing; if n <= 0 greet(n-1); greet(n) if n > 0 print “hello”; 26

  27. I MPLEMENTING GREET ( N ) (E DIT ) greet(n) do nothing; if n <= 0 greet(n-1); greet(n) if n > 0 print “hello”; 27

  28. I MPLEMENTING GREET ( N ) greet(n) do nothing; if n <= 0 greet(n-1); greet(n) if n > 0 print “hello”; public static void greet ( int n) { if (n > 0) { greet(n-1); System.out.println (“hello”); } } 28

  29. L IST - BASED R ECURSION : MULTIPLY L IST () multiplyList() = 1 if remaining input is: -1 multiplyList() = 2 if remaining input is: 2, -1 multiplyList() = 12 if remaining input is: 2, 6, -1 multiplyList() = readNextVal() if nextVal < 0 multiplyList() = readNextVal() * multiplyList() if nextVal > 0 29

  30. L IST - BASED R ECURSION : MULTIPLY L IST () multiplyList() = 1 if nextVal < 0 multiplyList() = readNextVal() * multiplyList() if nextVal > 0 public static int multiplyList () { int nextVal = Console.readInt(); if (nextVal < 0) return 1; else return nextVal*multiplyList(); } 30

  31. T RACING MULTIPLY L IST () public static int multiplyList () { int nextVal = Console.readInt(); if (nextVal < 0) return 1; else return nextVal*multiplyList(); } Invocation Invocation Invocation Invocation Invocation Invocation Remaining input Remaining input Remaining input Remaining input Remaining input Remaining input Return value Return value Return value Return value Return value Return value multiplyList() multiplyList() multiplyList() multiplyList() multiplyList() multiplyList() -1 -1 2, 30, -1 30, -1 -1 -1 1 ? ? 1 1 ? multiplyList() multiplyList() multiplyList() multiplyList() multiplyList() 30, -1 2, 30, -1 30, -1 30, -1 30, -1 30 30 ? ? ? multiplyList() multiplyList() multiplyList() multiplyList() 2, 30, -1 2, 30, -1 2, 30, -1 2, 30, -1 60 ? ? ? 31

  32. S UMMARY  Recursive Functions  Recursive Procedures  Number-based Recursion  List-based Recursion  See sections on trees, graphs, DAGs and visitor for other kinds of recursion 32

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend