/* *** hanoi.c: 「ハノイの塔」プログラム(再帰版)*** * (Y.H. revised 2004/04/27) * *** コンパイルの仕方 *** * % cc -o hanoi hanoi.c * *** 実行方法 *** * % hanoi [枚数] *  円盤の枚数を指定する。省略した場合には3枚。 */ #include int N = 3; // 円盤の枚数: デフォールト値 3 int step = 0; // 移動回数 void hanoi(n, from, via, to) // 主ルーチン: n 枚の円盤の山を int n; char from, via, to; // 軸 from から軸 to に移動する。 { // via は3番目の軸 if (n == 0) return; // 枚数が 0 ならやることがない。 /* * 以下では上の n-1 枚を from から via に移動し、最大の円盤を * to に移動したあと、n-1 枚を via から to に移動する。 */ hanoi(n-1, from, to, via); printf("%5d: move disc %2d from %c to %c\n", ++step, n, from, to); hanoi(n-1, via, from, to); } void main(argc, argv) // 主プログラム: コマンド行で int argc; char **argv; // 枚数が指定された場合にはそれを使う。 { if (argc > 1) N = atoi(argv[1]); hanoi(N, 'A', 'B', 'C'); // N:枚数、A, B, C は軸の名前 }