N次の多重ループ

        public static void Write(int[] i)
        {
            string s = "";
            for (int k = 0; k < i.Length; k++)
            {
                s += " " + i[k];
            }
            Console.WriteLine(s);
        }

        public static int m = 4;

        public static void Recursive(int[] i, int j)
        {
            for (i[j] = 0; i[j] < m; i[j]++)
            {
                if (j == i.Length - 1)
                {
                    SbiUtil.Write(i);
                }
                if (j + 1 < i.Length)
                {
                    Recursive(i, j + 1);
                }
            }
            // i[j] = 0; // この行は不要。
        }

        public MainForm()
        {
            int[] i = new int[4];
            SbiUtil.Recursive(i, 0);
        }

自分でゼロから書いてみたものの、なんでこれで動くのか良く分からん。