解决汉诺塔——递归思路

一、什么是汉诺塔?

就是把A塔是所有东西搬到C塔,B塔为辅助,下面到上面依次从大到小,且每一次只能移动一个。

假设A塔一开始有三层,那我们要怎么把他移动到C呢?

二、汉诺塔原理

1、把1和2看整体移动到B,再把3移动到C,接着把B的1和2移动到C就完成啦!当然这是编程的思路,而现实当中是不可以的,因为一次只能移动一个,请看正确的思路:

(1)我们先把1移到C塔

(2)再把2移到B塔

(3)再把1移到B塔

(4)把3移到C塔

(5)把1移到A塔

(6)把2移动C塔

(7)把1移动到C塔。此时所有的步骤结束,花了7步

三、pytho代码编写

def hannuota(n,a,b,c):          # n为层次,塔a、塔b、塔c
    if n==1:                    # 当只有一层直接搬到塔c
        print(a,"移到",c)
    else:
        hannuota(n-1,a,c,b)     # 除了最底层,把其他层看成一个整体,从a搬到b,c为经过,最后不放入
        print(a,"移到",c)
        hannuota(n-1,b,a,c)     # 除了最底层,把其他层看成一个整体,从b搬到c,a为经过,最后不放入

hannuota(3,"A","B","C")

为什么3行else代码就可以实现了呢?而现实要7步,因为代码有递归作用,他执行也是上面的7步,只是我们看不到,详细请往下看:

四、汉诺塔递归调用详细思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值