Recursion 4/4/01

/**
 * Write a description of class RecursionExamples here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */

import java.util.Date;

public class RecursionExamples
{

	static int counter = 0; 

	public static void main(String [] args) {

		// testTime();
		//doFact();
		doStringReverse();
	}

	public static void doStringReverse() {
		String str = "some string";

		printBackwards(str);	
	}

	public static void printBackwards(String s) {
		counter++;
		System.out.println(" " + s + " " + counter);
		if (s.equals("")) {
			counter--;
			System.out.println(counter);
			return;
		}
		else {
			System.out.print( s.charAt(s.length() - 1) );
			printBackwards( s.substring(0, s.length() - 1) );
		}
		counter--;
		System.out.println(counter);
		return;
	}

	public static int fact1(int n) {
		System.out.print( " " + n );
		if (n == 0) {
			return 1;
		}
		else {
			int result = n * fact1(n - 1);
			System.out.print( " " + result );
			return result;
		}
	}

	public static void doFact() {
		int answer;
		Timer t = new Timer();

		t.start();
		answer = fact1(25);
		System.out.println();
		answer = fact1(25);
		System.out.println();
		answer = fact1(25);
		System.out.println();

		t.stop();

		System.out.println("Fact1(25): " + fact1(10));

		System.out.println("Elapsed time: " + t.getElapsedTime());
	}

	public static void testTime() {
		Timer t = new Timer();
	
		try {
			Thread.sleep(0);
		}
		catch(InterruptedException e) {
		}

		t.start();

		long sum = 0;
		for(int i = 1; i < 10000; i++) {
			sum += i;
		}

		t.stop();

		System.out.println("Elapsed time: " + t.getElapsedTime() +
									" milliseconds");
		System.out.println("Sum = " + sum);

	}
}