递归转换非递归(汉诺塔为例)

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

使用递归实现汉诺塔

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)依照被调函数保存的返回地址将控制转移到调用函数 
所有的这些,不论是变量还

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值