Java Programming: Understanding Recursion - Base Cases, Algorithms, and Methods - Prof. Do, Study notes of Computer Science

An in-depth exploration of recursion in java programming, covering recursive definitions, algorithms, methods, base cases, general cases, and designing recursive methods. It also discusses recursion vs. Iteration and various recursive functions such as factorial, largest value in an array, recursive fibonacci, and towers of hanoi.

Typology: Study notes

Pre 2010

Uploaded on 07/30/2009

koofers-user-z9a
koofers-user-z9a 🇺🇸

5

(3)

8 documents

1 / 14

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
1
Java Programming: From Problem Analysis to Program Design, Second Edition 1
Chapter 14: Recursion
Recursive definitions.
Base case and general case.
Recursive algorithms.
Recursive methods.
Direct and indirect recursion.
Recursion Vs Iteration
Java Programming: From Problem Analysis to Program Design, Second Edition 2
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.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe

Partial preview of the text

Download Java Programming: Understanding Recursion - Base Cases, Algorithms, and Methods - Prof. Do and more Study notes Computer Science in PDF only on Docsity!

Java Programming: From Problem Analysis to Program Design, Second Edition 1

Chapter 14: Recursion

Œ Recursive definitions.

Œ Base case and general case.

Œ Recursive algorithms.

Œ Recursive methods.

Œ Direct and indirect recursion.

Œ Recursion Vs Iteration

Java Programming: From Problem Analysis to Program Design, Second Edition 2

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.

Java Programming: From Problem Analysis to Program Design, Second Edition 3

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.

Java Programming: From Problem Analysis to Program Design, Second Edition 4

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.

Java Programming: From Problem Analysis to Program Design, Second Edition 7

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.

Java Programming: From Problem Analysis to Program Design, Second Edition 8

Designing Recursive Methods

Œ Understand problem requirements.

Œ Determine limiting conditions.

Œ Identify base cases.

Œ Provide direct solution to each base case.

Œ Identify general cases.

Œ Provide solutions to general cases in terms of smaller versions of general cases.

Java Programming: From Problem Analysis to Program Design, Second Edition 9

Recursive Factorial Method

public static int fact(int num) { if (num = = 0) return 1; else return num * fact(num – 1); }

Java Programming: From Problem Analysis to Program Design, Second Edition 10

Recursive Factorial Method

Java Programming: From Problem Analysis to Program Design, Second Edition 13

Recursive Fibonacci

Java Programming: From Problem Analysis to Program Design, Second Edition 14

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); }

Java Programming: From Problem Analysis to Program Design, Second Edition 15

Recursive Fibonacci

Java Programming: From Problem Analysis to Program Design, Second Edition 16

Towers of Hanoi: Three Disk Problem

Java Programming: From Problem Analysis to Program Design, Second Edition 19

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); } }

Java Programming: From Problem Analysis to Program Design, Second Edition 20

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.

Java Programming: From Problem Analysis to Program Design, Second Edition 21

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); } }

Java Programming: From Problem Analysis to Program Design, Second Edition 22

Programming Example: Decimal to Binary

Java Programming: From Problem Analysis to Program Design, Second Edition 25

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

Java Programming: From Problem Analysis to Program Design, Second Edition 26

Programming Example: Sierpinski Gasket

Java Programming: From Problem Analysis to Program Design, Second Edition 27

Chapter Summary

Œ Recursive definitions

Œ Recursive algorithms

Œ Recursive methods

Œ Base cases & General cases

Œ Designing recursive methods

Œ Recursion vs. iteration

Œ Various recursive functions