我已经在python中为“河内之塔”编写了一个代码,我正在尝试添加一个计数器来显示它运行了多少次。我尝试了几个像while循环和循环等的东西,但它不起作用。我确信答案很简单,但我的大脑现在正在最低的设置下运行。我的代码如下所示:
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发生了变化,我不知道如何解决它。
编辑:
为了澄清,我想要购买这样的步骤:(如果我打电话给河内(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
答案 0 :(得分:2)
如何从函数中返回调用次数:
def Hanoi(n, src, dst, tmp):
if n > 0:
pre = Hanoi(n - 1, src, tmp, dst)
print "Move disc", chr(64 + n), "From tower", src, "to tower", dst
post = Hanoi(n - 1, tmp, dst, src)
return pre + post + 1
else:
return 1
请注意,这会计算Hanoi
函数的调用次数,而不是实际玩游戏时实际需要进行的移动次数。如果您想要移动次数,只需将基本情况中的return 1
(最后一行)更改为return 0
。
答案 1 :(得分:1)
还有另一种不使用“全局”的解决方案。既然不是每种语言都有。
.active{ coloring... }
答案 2 :(得分:0)
您可以使用全局计数器来跟踪调用函数的时间。
runcount = 0
def Hanoi(n, src, dst, tmp):
if n > 0:
global runcount
runcount += 1
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
print runcount
最后打印15张。
答案 3 :(得分:0)
1.def hanoi(n,s,t,b):
assert n > 0
if n == 1:
print 'move',s,'to',t
return 1 #######count number of iteration
else:
first=hanoi(n-1,s,b,t)
second=hanoi(1,s,t,b)
third=hanoi(n-1,b,t,s)
return first+second+third#####return times of 1
###print it on calling
for i in range(1,5):
print 'New Hanoi Example: hanoi(',i,',source, target, buffer)'
print '----------------------'
print hanoi(i,'source','target','buffer')