Python で「ハノイの塔」のコードを作成しました。実行回数を示すカウンターを追加しようとしています。while ループや for ループなどをいくつか試しましたが、うまくいきません。答えはとても簡単だと思いますが、私の脳は今、最低の設定で動いています。私のコードは次のようになります。
def Hanoi(n, src, dst, tmp):
if n > 0:
Hanoi(n - 1, src, tmp, dst)
print "Move disc", chr(64 + n), "From tower", src, "to tower", dst
Hanoi(n - 1, tmp, dst, src)
Hanoi(4,0,2,1) #Just an example
コードを (2^n)-1 回実行する必要があることはわかっていますが、実装できません。コードの書き方によって値 n が変化するため、それが機能するようになります。(私はこのようなことを試しました:
def Hanoi(n, src, dst, tmp):
a = 0
while (a < (2**n)-1)
a+=1
if n > 0:
Hanoi(n - 1, src, tmp, dst)
print a, "Move disc", chr(64 + n), "From tower", src, "to tower", dst
Hanoi(n - 1, tmp, dst, src)
しかし、私が言ったように、値 n が変化し、それを修正する方法がわかりません。
編集:
明確にするために、次のように歩数を買い物させたい: (If I call Hanoi(3,0,2,1))
1. Move disc A From tower 0 to tower 2
2. Move disc B From tower 0 to tower 1
3. Move disc A From tower 2 to tower 1
4. Move disc C From tower 0 to tower 2
5. Move disc A From tower 1 to tower 0
6. Move disc B From tower 1 to tower 2
7. Move disc A From tower 0 to tower 2