参考までに, 与えられた手数からハノイの塔の状態を復元する C 言語のプログラムを 以下に記しておく. それを hanoi2.c というファイルに保存してコンパイルすれば, n 段のハノイの塔の m 手目の状態を出力するプログラムが得られる. 例えば, 10 段のハノイの塔の 1000 手目が知りたければ, コマンド・ラインから
このプログラムは 16 段までのハノイの塔にしか対応していない. プログラムに関心のある読者は, 64 段のハノイの塔に対応するように, 改造を試みてほしい.
#include〈stdio.h〉 void main(argc, argv) int argc; char *argv[]; { int n, m, i, j, k, l, mask, tmp; if(argc < 3) exit(0); n = atoi(argv[1]); m = atoi(argv[2]); i = 1; j = 2; k = 3; mask = ((0xffff >> n) << n); if(m & mask) { printf("%d 手目は存在しません.\n", m); return; } mask = (0x0001 << (n-1)); for(l = n; l > 0; l --) { if(m & mask) { printf("板 %d は棒 %d に あります.\n",l,j); tmp = i; i = k; k = tmp; } else { printf("板 %d は棒 %d に あります.\n",l,i); tmp = j; j = k; k = tmp; } m = (m << 1); } }