mkdir ~/cs170/lab11 cd ~cs170002/share/lab11 cp *.java ~/cs170/lab11 cd ~/cs170/lab11 |
We will learn to write 2 recursive algorithms in this lab.
But first, some theory on how to think about recursive algorithms.
Example: factorial
public static int factorial( int n ) { int sol1, mySol; if ( n == 0 ) { return 1; // A solution is available for a base case } else { sol1 = factorial ( n - 1 ); mySol = n * sol1; return mySol; } } |
The original parameter is n, and factorial(n) invokes itself with a smaller parameter value (n−1)
|
So:
|
|
|
|
public static ReturnType solveProblem( int n ) { ReturnType sol1, mySol; if ( n is a base case ) { return solution; // A solution is available for a base case } else { sol1 = solveProblem ( n - 1 ); mySol = solve problem of size n using solution sol1; return mySol; } } |
Example: factorial
public static int factorial( int n ) { int sol1, mySol; if ( n == 0 ) { return 1; // A solution is available for a base case } else { sol1 = factorial ( n - 1 ); mySol = n * sol1; return mySol; } } |
|
|
But, that is not always the case.
The most common smaller problem that a "string typed" recursive method solves within itself uses a string of shorter length n−1.
|
|
cd ~/cs170/lab11 /home/cs170002/turnin-lab Power.java lab11 /home/cs170002/turnin-lab SumDigits.java lab11a |
For the Lead TA:
|