Recursion Problems �& Complexity Analysis
Chapter 12.2
Recursion
A Loop That "Counts" From 1 To 10
public void count() {
for(int nI = 1; nI <= 10; nI++)
System.out.println(nI);
}
A Recursive Function that "counts" from nTimes to 10
public void count(int nTimes) {
if(nTimes == 10){
System.out.print(nTimes + "Stop!");
} else {
System.out.println(nTimes);
count(nTimes+1);
}
}
Recursion: �A method that calls itself
In Recursion, The Stopping Point Is Called The Base Case
public void mystery(int nTimes) {
if(nTimes == 0) {
System.out.println("Stop!");
} else {
System.out.println(Math.random());
mystery(nTimes-1);
}
}
Just like a loop, it has a starting point, a stopping point, and a way to get from one to the other
public class Recursion extends Applet {
public void init() {
count(1);
}
public void count(int nTimes)
{
if(nTimes == 10)
System.out.println(nTimes + " Stop!");
else
{
System.out.println(nTimes);
count(nTimes+1);
}
}
}
Head vs. Tail Recursion
Tail Recursion
public void tailRecursion(int nNum) {
if(nNum >= 10) {
System.out.println("base case");
} else {
System.out.print(nNum + ", ");
tailRecursion(nNum + 1);
}
}
Head Recursion
public void headRecursion(int nNum) {
if(nNum >= 10) {
System.out.println("base case");
} else {
headRecursion(nNum + 1);
System.out.print(nNum + ", ");
}
}
Head vs. Tail Recursion
Complexity Analysis
Complexity Analysis
Big-O Notation
Towers of Hanoi
If data increases by one, work doubles.
Exponential
O(2^n)
Bubble Sort, Selection, Insertion
quadruples
Quadratic
O(n^2)
Merge Sort, Quick Sort
>2x & <4x
Linear Logarithmic
O(n log n)
Linear Search
doubles
Linear
O(n)
Binary Search
increases by 1
Logarithmic
O(log n)
Array storage & retrieval
no effect
Constant
O(1)
Example
Effect of 2x Data
Explanation
Expression
Big-O | comp. for 10 things comp. for 100 things
---------------------------------------------------------------------
O(1) 1 1
O(log(n)) 3 7
O(n) 10 100
O(n log(n)) 30 700
O(n^2) 100 10000
So take quicksort which is O(n log(n)) vs bubble sort which is O(n^2). When sorting 10 things, quicksort is 3 times faster than bubble sort. But when sorting 100 things, it's 14 times faster! Clearly picking the fastest algorithm is important then. When you get to databases with million rows, it can mean the difference between your query executing in 0.2 seconds, versus taking hours.
Big-O Example from Harvard
Big-O Example from Harvard