ハノイの塔
なんちゃってPrologっぽく書いてあるけど、Prologでは動かない擬似コード。
ハノイの塔 (1 スタート ゴール 空き 手順) :- 手順=[ (スタート.ゴール) ].
ハノイの塔 (n スタート ゴール 空き 手順) :-
ハノイの塔(n-1 スタート 空き ゴール 手順1) ,
ハノイの塔(1 スタート ゴール 空き 手順2) ,
ハノイの塔(n-1 空き ゴール スタート 手順3),
連結([手順1 手順2 手順3] , 手順].
関数 | 条件 | hanoii | |
hanoii | X | 終 | |
hanoii | それ以外 | 再帰呼び出し3回 |
単純に、n-1の呼び出しが2回、1枚の移動が1回の線形和なので、nの2倍のオーダーで終了します。