Here\'s my code
using System;
public class Program
{
public static void Method(int flowerInVase)
{
if (flowerInVase > 0)
{
You're getting 1,2,3 because of the way the lines in your if statement are ordered.
Main() calls Method(3).
Method(3) calls Method(2) before it has a chance to print "3". Execution immediately jumps to the top of Method; your first call to Method, with flowersinvase=3, won't complete until the recursive call does. Likewise, Method(2) immediately calls Method(1), and Method(1) calls Method(0).
Method(0) does nothing and returns to Method(1), exactly where it left off; the next line is your WriteLine call, which prints "1" and then returns, which picks up the call to Method(2) where it left off, printing "2", and so on for "3".
You would only get "3,2,1" if the methods you called ran to completion before jumping to any methods they called recursively, which is not how C# works. The thing you have to remember about method calls is that once you call a method, execution jumps immediately to the start of the method you called; the code after the method call will not execute until the method returns.