使用递归实现汉诺塔
class UnitTest:
def __init__(self):
self.count=0
def Move(self,n,A,C):
self.count=self.count+1
print("Count:",self.count," ",n," ",A,"=====>",C)
def HanoiTower(self,n,A,B,C):
if n==1:
self.Move(n,A,C)
else:
self.HanoiTower(n-1,A,C,B)
self.Move(n,A,C)
self.HanoiTower(n-1,B,A,C)
######################################
##运行测试代码
######################################
unitTest=UnitTest()
unitTest.HanoiTower(3,"柱子1","柱子2","柱子3")
递归实现代码简单,比较好理解,但是运行起来发现挺慢的,递归程序执行过程中,会占用很多的空间,而且递归次数过多,可能会导致栈溢出,甚至系统的奔溃,参阅了一些书籍和资料,以下是其他博客原话:
通常一个函数在调用另一个函数之前,要做如下的事情:
a)将实在参数,返回地址等信息传递给被调函数保存;
b)为被调用函数的局部变量分配存储区
c)将控制转移到被调函数的入口
从被调用函数返回调用函数之前,也要做三件事情
a)保存被调函数的计算结果
b)释放被调函数的数据区
c)依照被调函数保存的返回地址将控制转移到调用函数
所有的这些,不论是变量还

这篇博客探讨了如何将使用递归实现的汉诺塔问题转化为非递归实现,以解决递归可能导致的效率低和栈溢出问题。递归在执行时会占用大量栈空间,而通过栈来模拟递归过程可以避免这些问题。文中提供了非递归实现的思路,鼓励读者参考并指出可能的改进之处。
最低0.47元/天 解锁文章
3660

被折叠的 条评论
为什么被折叠?



