chapter 15 recursion
play

Chapter 15 Recursion CS1: Java Programming Colorado State - PowerPoint PPT Presentation

Chapter 15 Recursion CS1: Java Programming Colorado State University Original slides by Daniel Liang Modified slides by Kris Brown Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 1 rights reserved.


  1. Chapter 15 Recursion CS1: Java Programming Colorado State University Original slides by Daniel Liang Modified slides by Kris Brown Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 1 rights reserved.

  2. Motivations Suppose you want to find all the files under a directory that contains a particular word. How do you solve this problem? There are several ways to solve this problem. An intuitive solution is to use recursion by searching the files in the subdirectories recursively. Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 2 rights reserved.

  3. Motivations H-trees, depicted in Figure 18.1, are used in a very large-scale integration (VLSI) design as a clock distribution network for routing timing signals to all parts of a chip with equal propagation delays. How do you write a program to display H-trees? A good approach is to use recursion. Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 3 rights reserved.

  4. Computing Factorial factorial(0) = 1; factorial(n) = n*factorial(n-1); n! = n * (n-1)! 0! = 1 Run ComputeFactorial Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 4 rights reserved.

  5. animation Computing Factorial factorial(0) = 1; factorial(n) = n*factorial(n-1); factorial(4) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 5 rights reserved.

  6. animation Computing Factorial factorial(0) = 1; factorial(n) = n*factorial(n-1); factorial(4) = 4 * factorial(3) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 6 rights reserved.

  7. animation Computing Factorial factorial(0) = 1; factorial(n) = n*factorial(n-1); factorial(4) = 4 * factorial(3) = 4 * 3 * factorial(2) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 7 rights reserved.

  8. animation Computing Factorial factorial(0) = 1; factorial(n) = n*factorial(n-1); factorial(4) = 4 * factorial(3) = 4 * 3 * factorial(2) = 4 * 3 * (2 * factorial(1)) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 8 rights reserved.

  9. animation Computing Factorial factorial(0) = 1; factorial(n) = n*factorial(n-1); factorial(4) = 4 * factorial(3) = 4 * 3 * factorial(2) = 4 * 3 * (2 * factorial(1)) = 4 * 3 * ( 2 * (1 * factorial(0))) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 9 rights reserved.

  10. animation Computing Factorial factorial(0) = 1; factorial(n) = n*factorial(n-1); factorial(4) = 4 * factorial(3) = 4 * 3 * factorial(2) = 4 * 3 * (2 * factorial(1)) = 4 * 3 * ( 2 * (1 * factorial(0))) = 4 * 3 * ( 2 * ( 1 * 1))) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 10 rights reserved.

  11. animation Computing Factorial factorial(0) = 1; factorial(n) = n*factorial(n-1); factorial(4) = 4 * factorial(3) = 4 * 3 * factorial(2) = 4 * 3 * (2 * factorial(1)) = 4 * 3 * ( 2 * (1 * factorial(0))) = 4 * 3 * ( 2 * ( 1 * 1))) = 4 * 3 * ( 2 * 1) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 11 rights reserved.

  12. animation Computing Factorial factorial(0) = 1; factorial(n) = n*factorial(n-1); factorial(4) = 4 * factorial(3) = 4 * 3 * factorial(2) = 4 * 3 * (2 * factorial(1)) = 4 * 3 * ( 2 * (1 * factorial(0))) = 4 * 3 * ( 2 * ( 1 * 1))) = 4 * 3 * ( 2 * 1) = 4 * 3 * 2 Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 12 rights reserved.

  13. animation Computing Factorial factorial(0) = 1; factorial(n) = n*factorial(n-1); factorial(4) = 4 * factorial(3) = 4 * (3 * factorial(2)) = 4 * (3 * (2 * factorial(1))) = 4 * (3 * ( 2 * (1 * factorial(0)))) = 4 * (3 * ( 2 * ( 1 * 1)))) = 4 * (3 * ( 2 * 1)) = 4 * (3 * 2) = 4 * (6) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 13 rights reserved.

  14. animation Computing Factorial factorial(0) = 1; factorial(n) = n*factorial(n-1); factorial(4) = 4 * factorial(3) = 4 * (3 * factorial(2)) = 4 * (3 * (2 * factorial(1))) = 4 * (3 * ( 2 * (1 * factorial(0)))) = 4 * (3 * ( 2 * ( 1 * 1)))) = 4 * (3 * ( 2 * 1)) = 4 * (3 * 2) = 4 * (6) = 24 Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 14 rights reserved.

  15. animation Trace Recursive factorial Executes factorial(4) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 15 rights reserved.

  16. animation Trace Recursive factorial Executes factorial(3) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 16 rights reserved.

  17. animation Trace Recursive factorial Executes factorial(2) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 17 rights reserved.

  18. animation Trace Recursive factorial Executes factorial(1) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 18 rights reserved.

  19. animation Trace Recursive factorial Executes factorial(0) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 19 rights reserved.

  20. animation Trace Recursive factorial returns 1 Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 20 rights reserved.

  21. animation Trace Recursive factorial returns factorial(0) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 21 rights reserved.

  22. animation Trace Recursive factorial returns factorial(1) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 22 rights reserved.

  23. animation Trace Recursive factorial returns factorial(2) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 23 rights reserved.

  24. animation Trace Recursive factorial returns factorial(3) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 24 rights reserved.

  25. animation Trace Recursive factorial returns factorial(4) Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 25 rights reserved.

  26. factorial(4) Stack Trace Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 26 rights reserved.

  27. Other Examples f(0) = 0; f(n) = n + f(n-1); Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 27 rights reserved.

  28. Fibonacci Numbers Fibonacci series: 0 1 1 2 3 5 8 13 21 34 55 89… indices: 0 1 2 3 4 5 6 7 8 9 10 11 fib(0) = 0; fib(1) = 1; fib(index) = fib(index -1) + fib(index -2); index >=2 fib(3) = fib(2) + fib(1) = (fib(1) + fib(0)) + fib(1) = (1 + 0) +fib(1) = 1 + fib(1) = 1 + 1 = 2 Run ComputeFibonacci Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 28 rights reserved.

  29. Fibonnaci Numbers, cont. Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 29 rights reserved.

  30. Characteristics of Recursion All recursive methods have the following characteristics: – One or more base cases (the simplest case) are used to stop recursion. – Every recursive call reduces the original problem, bringing it increasingly closer to a base case until it becomes that case. In general, to solve a problem using recursion, you break it into subproblems. If a subproblem resembles the original problem, you can apply the same approach to solve the subproblem recursively. This subproblem is almost the same as the original problem in nature with a smaller size. Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 30 rights reserved.

  31. Problem Solving Using Recursion Let us consider a simple problem of printing a message for n times. You can break the problem into two subproblems: one is to print the message one time and the other is to print the message for n-1 times. The second problem is the same as the original problem with a smaller size. The base case for the problem is n==0. You can solve this problem using recursion as follows: nPrintln(“Welcome”, 5); public static void nPrintln(String message, int times) { if (times >= 1) { System.out.println(message); nPrintln(message, times - 1); } // The base case is times == 0 } Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 31 rights reserved.

  32. Think Recursively Many of the problems presented in the early chapters can be solved using recursion if you think recursively . For example, the palindrome problem can be solved recursively as follows: public static boolean isPalindrome(String s) { if (s.length() <= 1) // Base case return true; else if (s.charAt(0) != s.charAt(s.length() - 1)) // Base case return false; else return isPalindrome(s.substring(1, s.length() - 1)); } Liang, Introduction to Java Programming, Tenth Edition, (c) 2013 Pearson Education, Inc. All 32 rights reserved.

Recommend


More recommend