Recursion By Hand: a 'warm-up' exercise

The goal for this exercise is to understand how what recursion is, how it operates within the computer (at a mechanical level), and to use that knowledge to successfully predict what a function produces as output.  The longer-term goal is to get you familiar enough with recursion that you can eventually write (and debug, using the skills you’re developing in this exercise) your own recursive code.

What you need to do for this exercise: 

  1. Figure out (by hand) what the following method will print. 
    1. It may be helpful to print out multiple copies of the function, so that it’s easier to keep track of
  2. (If you're handing this in for Pre-Class Exercises, simply write the output that you predict into comments in the class named Warmup)

namespace RecursionExercises
{
      class Class1
      {
            [STAThread]
            static void Main(string[] args)
            {
                  PrintHelper ph = new PrintHelper();

                  int result = ph.foo(3);

                  Console.WriteLine( "End result: " + result);
            }
      }
      class PrintHelper
      {
            public int foo(int f)
            {
                  Console.WriteLine( "Handed " + f );
                  if (f <= 0)
                        return f;
                  else
                  {
                        int result = foo(f - 1);

                                                Console.WriteLine( "Returning " + result );
                        return ++result;
                  }
            }
      }
}