順列
1からNまでの整数の順列を出力するプログラムです。
class Program { private const int N = 4; private static int i; private static int[] p; internal static void Main(string[] args) { i = 0; p = new int[N + 1]; for (int k = 0; k < N; k++) Try(k + 1); } private static void Try(int k) { i++; p[k] = i; if (i == N) { Print(); } else { for (int j = 0; j < N; j++) { if (p[j + 1] == 0) Try(j + 1); } } i--; p[k] = 0; } private static void Print() { for (int i = 0; i < N; i++) Console.Write(p[i + 1] + " "); Console.WriteLine(""); } }
Software Technology 12 コンピュータアルゴリズム事典(名著!)のパクリです。*1
元が Pascal ですから、ちょっと怪しい(^_^;)。
グローバル変数に「i」なんて定義しちゃってるところがすごいですね。あと、やっぱり再帰は不思議だ。
なんでこんなことやってるかっつーと、Visual Studio 2010 の学習のためですが、Call Hierarchy - Visual Studio 2015 | Microsoft Docsの「呼び出し先」「呼び出し元」って逆じゃね?
*1:33p.