ハノイ塔問題のPythonコードonlineが見つかりました。コードは機能しますが、わかりにくいです。ここでは、次のとおりです。難解Pythonのハノイ塔の再帰的実装の理解
def hanoi(n, source, helper, target):
if n > 0:
# move tower of size n - 1 to helper:
hanoi(n - 1, source, target, helper)
# move disk from source peg to target peg
if source:
target.append(source.pop())
# move tower of size n-1 from helper to target
hanoi(n - 1, helper, source, target)
source = [2, 1]
target = []
helper = []
hanoi(len(source), source, helper, target)
print (source, helper, target)
私は最後の部分で問題を抱えている:
hanoi(n - 1, helper, source, target)
は、私の知る限り理解できるよう、起こるだけ移動はtarget.append経由で(source.pop ())行。私たちが[2,1]の単純なリストでそれをするとき、1を目標リストに移動した後、何とか1をヘルパーリストに移動させますが、どうやって???
私はそれを参照してください方法は、ここで実行をプログラムする方法は次のとおりです。それは、ターゲットに1を移動させ、それが私の難しい点に達する、nを返す= 1、n = 0のは、何もしません達し、
hanoi(n - 1, helper, source, target)
を実行します
ですが、n-1 = 0なので、何もしないので、 source = [2]、helper = []、target = [1]でn = 2に移動する必要があります。しかし、私がプログラムでプリントを使用すると、難しさの後、n = 2の前に、何らかの形でヘルパーに1が移動し、状況がsource = [2]、helper = [1]、target = []
n = 0でもどうしますか? n> 0の場合にのみ実行されるという条件がありますか?その瞬間に何が起こっているのかを知るためにプリントを使用するにはどうすればいいですか?
トリックは、引数の順序である:あなたがヘルパーを参照してスワップをターゲットにすることができます。 –
いくつかの 'print'sを追加しようとしましたか? http://pythontutor.com/何が起こるかを視覚化するには? – jonrsharpe
@DanielRosemanはまだn = 0です。これは、条件n> 0が満たされていないことを意味します。 n = 0のとき、関数は何もしないはずです! – blz