我已经使用非递归方法编写了以下河内问题塔的代码。我猜这是不正确的,因为移动次数不是2 ** n - 1,例如,如果要移动3个磁盘,它必须产生7次移动。提前致谢。河内塔非递归:我的代码是否正确?
######################
# Towers of Hanoi #
######################
numbers = []
def TowersofHanoi():
# Proram to simulate Towers of hanoi
# Objective is to move the disks from A to C
# with B as a temporary varialbel
print "Program to simulate Towers of Hanoi"
print "Users will input numbers of disks, which is 'A'"
print "The disks have to be moved from A to C"
print "With B as temporary placeholder"
print "Enter the number of disks to be moved:",
Num = int (raw_input("> "))
Src = Num
Aux = 0
Dst = 0
print "you have entered %d disks to be moved"
print "Source is -->", Src
print "Auxillary is -->", Aux
print "Destination is -->", Dst
print "Disk positions after the placement:"
#B = A-1
#print B
while Num >= 1:
print Num
Aux = Num-1
Src = Src-Aux
Dst = Src
print "Source is -->", Src
print "Auxillary is -->", Aux
print "Destination is -->", Dst
Src = Aux
Num = Num-1
numbers.append(Dst)
print numbers
print "The task of accomplishing the movements of disk is over"
print "This completes TOWERS OF HANOI!"
print "Final disk positions are:"
print "Source is -->", Src
print "Auxillary is -->", Aux
print "Destination is -->", len(numbers)
TowersofHanoi()
您是否尝试过将此与现有算法进行匹配? – Dogbert 2012-08-06 09:19:23
虽然将此与算法相匹配,但我发现此问题存在一些问题。 – carlosmoya 2012-08-06 09:22:25
我会编辑我的问题。 – carlosmoya 2012-08-06 09:28:47