python递归实现汉诺塔

def fun(n, a, b, c):
    if n:
        fun(n - 1, a, c, b)
        print(a + "->" + c)
        fun(n - 1, b, a, c)
n = (int)(input("请输入需要从A到C的盘子数:"))
fun(n, 'A', 'B', 'C')
 运行测试:输入3, 下面是打印的结果
--------------------------------------------
请输入需要从A到C的盘子数:3
A->C
A->B
C->B
A->C
B->A
B->C
A->C

        汉诺塔是大家所熟知的一个东西。打印移动过程,首先输入一个正整数n,调用fun函数,函数参数列表的a,b,c表示,需要从a柱借助b柱移动到c柱

        递归需要一个递归出口,这里的递归出口写的较为简洁,它的本意是:如果n不为0就执行下面的内容。

        n为3,让a上的2个盘子,借助c,移动到b盘,然后我再让a剩下的一个盘子移动到c,最后让b上的2个盘子借助a柱移动到c柱,这样就成功解决我们的问题。它的过程就是,既然我们要把n个盘子从a柱移动到c柱,那么就需要我们先把a柱上,n-1个盘子借助c柱全部移动到b柱,这样的话,我们a上剩余最大的盘子就可以直接由a移动到c柱,最后b还有n-1个盘子需要我们借助a柱移动到c柱,既然我们能实现第n个步骤的过程,那么我们也能实现第n+1和n-1的过程,所以我们要实现将n-1个盘子从b柱移动到c柱,就要把n-2个盘子借助c柱移动到a柱。还是那句红色的话,因为我们参数列表的意义就是这样(函数参数列表的a,b,c表示,需要从a柱借助b柱移动到c柱),所以才能让每次打印输出的时候,导致有一个柱子上的单独的盘子,直接移动到目标柱子!

        要理解递归实现递归,首先就是要理解他是怎样的思想!读者可细品上述红色的句子,更有助于进一步理解和进阶.

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值