Recursive Problem Solving



Infinite Mirrors



Factorial

public static int factorial (int n) {
    if (n == 0) {
      return 1;
    }
    return n * factorial (n - 1);
  }



Recursive-Valued Methods



Recursion Invariants



Recursive Void Methods



Printing a String Backwards

public static void
  printBackwards (String s, int size) {
// pre: s.length >= size, size >= 0
// post: s has been printed backwards
  if (size > 0) {
    System.out.println
       (s.subtring(size-1, size));
    printBackwards (s, size - 1);
  }
}



Printing an Integer

public static void printInt (int n) {
// pre: n >= 0
// post: n has been printed
  if (n >= 10) {
    printInt (n / 10);
  }
  printDigit (n % 10);
}



Fibonacci



Fibonacci numbers



Fibonacci: Implementations

// recursive implementation
// note there are two base cases
// pre: n > 0,   post: returns fib(n)
public static int fib (int n) {
  if ((n == 1) || (n == 2)) {
    return 1;
  }
  return fib (n - 1) + fib (n - 2)
}
// iterative implementation
public static int fib (int n) {
  if (n <= 2) return 1;

int n1 = 1; int n2 = 1; int i = 2; while (i++ <= n) { int sum = n1 + n2; n1 = n2; n2 = sum; } return n2;



Recursion and Iteration



Choosing k out of n



In-Class exercise