Python でハノイの塔プロブレムを解く

Manav Narula 2023年10月10日
Python でハノイの塔プロブレムを解く

ハノイの塔の問題は、問題解決クイズを増幅するために、最初に新しいプログラマーに導入される基本的な数学パズルです。

問題は単純で、3 本のロッドが関係しています。1つのロッドには、降順で複数のディスクが含まれ、最大のディスクが下部に、最小のディスクが上部にあります。2 番目のロッドを使用してこれをロッド 1 からロッド 3 に転送する必要があります。

特定のルールを念頭に置く必要があります。同時に移動できるディスクは 1つだけで、ロッドの上部にあるディスクを使用する必要があります。また、小さなディスクの上に大きなディスクを配置することはできません。
このすべてを念頭に置いて、この問題を解決し、それを解決するために取られた移動の総数を計算する必要があります。

このチュートリアルでは、この問題を解決する方法を紹介します。Python でハノイの塔の問題を解決するために再帰的な方法を使用します。

このメソッドは、ハノイの塔の問題を解決するために、いくつかの条件に基づいて再帰的に自分自身を呼び出す関数を作成します。
このためのロジックを次のコードで実装します。

def ToH(n, A, B, C):
    if n == 1:
        print("Disk 1 from", A, "to", B)
        return
    ToH(n - 1, A, C, B)
    print("Disk", n, "from", A, "to", B)
    ToH(n - 1, C, B, A)


ToH(3, "A", "B", "C")

出力:

Disk 1 from A to B
Disk 2 from A to C
Disk 1 from B to C
Disk 3 from A to B
Disk 1 from C to A
Disk 2 from C to B
Disk 1 from A to B

上記の例では、ロッド C を使用して 3つのディスクをロッド A からロッド B に移動します。

ご覧のとおり、上記の例で実行された移動の合計数は 7 です。ディスクの数が n の場合、この方法を使用して実行された移動の合計は常に 2 ^ n-1 に等しくなります。

時間の経過とともに、スタックを使用してハノイの塔の問題を解決するためのいくつかの他のソリューションが登場しました。それでも、そのような方法は時間と速度が非常に非効率的であるため、それらを使用することはお勧めしません。

著者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn