ボクココ

個人開発に関するテックブログ

再帰を考えるときのメモ(ハノイの塔を例にして)

/*
* 再帰を考えるときのメモ
*
* ・まず始めに、n=1からはじめ、1個ずつ増やしてみる。
* [重要]nが1増えるときに、前の結果が流用できないかを考える!
*
* もし流用できそうな場合は、それは再帰が使える可能性が高い。
*
*
* 今回のハノイの塔の問題の場合:
*
* n=0 のときは何もしない。
*
* n=1 のときは塔1から塔3へに移すだけ. moveTopTo(destination);
*
* n=2 のときは
* 円盤1を塔1から塔2へもっていき、 moveDisks(n - 1, buffer, destination);
* 円盤2を塔1から塔3へもっていき、 moveTopTo(destination);
* 円盤1を塔2から塔3へ buffer.moveDisks(n - 1, destination, this);
*
* n=3 のときは
* n=2のときのようにして上2つの円盤を塔2へ持っていき、 moveDisks(n - 1, buffer, destination);
* 円盤3を塔1から塔3へ移したあとに moveTopTo(destination);
* n=2のときのようにして塔2にある円盤たちを塔3へもっていく buffer.moveDisks(n - 1, destination, this);
*
* n=4 のときは
* n=3のときのようにして上3つの円盤を塔2へ持っていき、 moveDisks(n - 1, buffer, destination);
* 円盤3を塔1から塔3へ移したあとに moveTopTo(destination);
* n=3のときのようにして塔2にある円盤たちを塔3へもっていく buffer.moveDisks(n - 1, destination, this);
* ...
*
* てな感じになる。
*
*/