Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 14: Recursion J ava P rogramming: From Problem Analysis to Program Design, From Problem Analysis to Program Design, Second Edition Second Edition.

Similar presentations


Presentation on theme: "Chapter 14: Recursion J ava P rogramming: From Problem Analysis to Program Design, From Problem Analysis to Program Design, Second Edition Second Edition."— Presentation transcript:

1 Chapter 14: Recursion J ava P rogramming: From Problem Analysis to Program Design, From Problem Analysis to Program Design, Second Edition Second Edition

2 Java Programming: From Problem Analysis to Program Design, Second Edition2 Chapter Objectives  Learn about recursive definitions.  Explore the base case and the general case of a recursive definition.  Learn about recursive algorithms.  Learn about recursive methods.  Become aware of direct and indirect recursion.  Explore how to use recursive methods to implement recursive algorithms.

3 Java Programming: From Problem Analysis to Program Design, Second Edition3 Recursive Definitions  Recursion:  Process of solving a problem by reducing it to smaller versions of itself.  Recursive definition:  Definition in which a problem is expressed in terms of a smaller version of itself.  Has one or more base cases.

4 Java Programming: From Problem Analysis to Program Design, Second Edition4 Recursive Definitions  Recursive algorithm:  Algorithm that finds the solution to a given problem by reducing the problem to smaller versions of itself.  Has one or more base cases.  Implemented using recursive methods.  Recursive method:  Method that calls itself.  Base case:  Case in recursive definition in which the solution is obtained directly.  Stops the recursion.

5 Java Programming: From Problem Analysis to Program Design, Second Edition5 Recursive Definitions  General solution:  Breaks problem into smaller versions of itself.  General case:  Case in recursive definition in which a smaller version of itself is called.  Must eventually be reduced to a base case.

6 Java Programming: From Problem Analysis to Program Design, Second Edition6 Tracing a Recursive Method Recursive method:  Has unlimited copies of itself.  Every recursive call has its own:  Code  Set of parameters  Set of local variables

7 Java Programming: From Problem Analysis to Program Design, Second Edition7 Tracing a Recursive Method  After completing a recursive call:  Control goes back to the calling environment.  Recursive call must execute completely before control goes back to previous call.  Execution in previous call begins from point immediately following recursive call.

8 Java Programming: From Problem Analysis to Program Design, Second Edition8 Recursive Definitions  Directly recursive: A method that calls itself.  Indirectly recursive: A method that calls another method and eventually results in the original method call.  Tail recursive method: Recursive method in which the last statement executed is the recursive call.  Infinite recursion: The case where every recursive call results in another recursive call.

9 Java Programming: From Problem Analysis to Program Design, Second Edition9 Designing Recursive Methods  Understand problem requirements.  Determine limiting conditions.  Identify base cases.

10 Java Programming: From Problem Analysis to Program Design, Second Edition10 Designing Recursive Methods  Provide direct solution to each base case.  Identify general cases.  Provide solutions to general cases in terms of smaller versions of general cases.

11 Java Programming: From Problem Analysis to Program Design, Second Edition11 Recursive Factorial Method public static int fact(int num) { if (num = = 0) return 1; else return num * fact(num – 1); }

12 Java Programming: From Problem Analysis to Program Design, Second Edition12 Recursive Factorial Method

13 Java Programming: From Problem Analysis to Program Design, Second Edition13 Largest Value in Array public static int largest(int[] list, int lowerIndex, int upperIndex) { int max; if (lowerIndex == upperIndex) return list[lowerIndex]; else { max = largest(list, lowerIndex + 1, upperIndex); if (list[lowerIndex] >= max) return list[lowerIndex]; else return max; }

14 Java Programming: From Problem Analysis to Program Design, Second Edition14 Largest Value in Array

15 Java Programming: From Problem Analysis to Program Design, Second Edition15 Recursive Fibonacci

16 Java Programming: From Problem Analysis to Program Design, Second Edition16 Recursive Fibonacci public static int rFibNum(int a, int b, int n) { if(n = = 1) return a; else if (n = = 2) return b; else return rFibNum(a, b, n -1) + rFibNum(a, b, n - 2); }

17 Java Programming: From Problem Analysis to Program Design, Second Edition17 Recursive Fibonacci

18 Java Programming: From Problem Analysis to Program Design, Second Edition18 Towers of Hanoi: Three Disk Problem

19 Java Programming: From Problem Analysis to Program Design, Second Edition19 Towers of Hanoi: Three Disk Solution

20 Java Programming: From Problem Analysis to Program Design, Second Edition20 Towers of Hanoi: Three Disk Solution

21 Java Programming: From Problem Analysis to Program Design, Second Edition21 Towers of Hanoi: Recursive Algorithm public static void moveDisks(int count, int needle1, int needle3, int needle2) { if (count > 0) { moveDisks(count - 1, needle1, needle2, needle3); System.out.println( " Move disk " + count + " from needle " + needle1 + " to needle " + needle3 + ". " ); moveDisks(count - 1, needle2, needle3, needle1); }

22 Java Programming: From Problem Analysis to Program Design, Second Edition22 Recursion or Iteration?  Two ways to solve particular problem:  Iteration  Recursion  Iterative control structures use looping to repeat a set of statements.  Tradeoffs between two options:  Sometimes recursive solution is easier.  Recursive solution is often slower.

23 Java Programming: From Problem Analysis to Program Design, Second Edition23 Programming Example: Decimal to Binary public static void decToBin(int num, int base) { if (num > 0) { decToBin(num / base, base); System.out.print(num % base); }

24 Java Programming: From Problem Analysis to Program Design, Second Edition24 Programming Example: Decimal to Binary

25 Java Programming: From Problem Analysis to Program Design, Second Edition25 Programming Example: Sierpinski Gasket

26 Java Programming: From Problem Analysis to Program Design, Second Edition26 Programming Example: Sierpinski Gasket  Input: Non-negative integer that indicates level of Sierpinski gasket.  Output: Triangle shape that displays a Sierpinski gasket of the given order.  Solution includes:  Recursive method drawSierpinski.  Method to find midpoint of two points.

27 Java Programming: From Problem Analysis to Program Design, Second Edition27 private void drawSierpinski(Graphics g, int lev, Point p1, Point p2, Point p3) { Point midP1P2; Point midP2P3; Point midP3P1; if (lev > 0) { g.drawLine(p1.x, p1.y, p2.x, p2.y); g.drawLine(p2.x, p2.y, p3.x, p3.y); g.drawLine(p3.x, p3.y, p1.x, p1.y); midP1P2 = midPoint(p1, p2); midP2P3 = midPoint(p2, p3); midP3P1 = midPoint(p3, p1); drawSierpinski(g, lev - 1, p1, midP1P2, midP3P1); drawSierpinski(g, lev - 1, p2, midP2P3, midP1P2); drawSierpinski(g, lev - 1, p3, midP3P1, midP2P3); } Programming Example: Sierpinski Gasket

28 Java Programming: From Problem Analysis to Program Design, Second Edition28 Programming Example: Sierpinski Gasket

29 Java Programming: From Problem Analysis to Program Design, Second Edition29 Chapter Summary  Recursive definitions  Recursive algorithms  Recursive methods  Base cases  General cases

30 Java Programming: From Problem Analysis to Program Design, Second Edition30 Chapter Summary  Tracing recursive methods  Designing recursive methods  Varieties of recursive methods  Recursion vs. iteration  Various recursive functions


Download ppt "Chapter 14: Recursion J ava P rogramming: From Problem Analysis to Program Design, From Problem Analysis to Program Design, Second Edition Second Edition."

Similar presentations


Ads by Google