美文网首页
利用递归完成汉罗塔游戏

利用递归完成汉罗塔游戏

作者: 伍只蚊 | 来源:发表于2017-07-17 18:56 被阅读27次

通过这个又加深了对递归函数的理解
题目为:

  • 编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A、B、C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的方法

思路:

1. 先不想如何实现move函数,假设move函数已经定义好了,而且可以完成以上功能。

2. 将n个盘子想象成两部分,最上面的n-1个盘子为一体,最下面的大个1为一体

3. 在这种情况下,将n-1部分移到,目标位置就很

容易实现:

  1. 先将上面n-1部分放入,中间位置缓存区
  2. 将下面1部分放入 终点位置
  3. 将缓存区位置的n-1放入c上
    完成!

那具体怎么实现?
我们先利用假设已经完成的move()方法来实现

  1. move(n-1,a,c,b) 上面n-1部分放入,中间位置缓存区
  2. move(1,a,b,c) 下面1部分放入 终点位置
  3. move(n-1,b,a,c) 将缓存区位置的n-1放入c上
    这样就把n个盘子都放入了指定柱子
    那我们的函数就可以这样定义:
    def move(n,a,b,c): if n==1: print('%s-->%s'%(a,c)) return move(n-1,a,c,b)#使用假设的方法 move(1,a,b,c) move(n-1,b,a,c)
    虽然还是有点纠结,但是通过这种方法也算是对递归有了新了解

相关文章

网友评论

      本文标题:利用递归完成汉罗塔游戏

      本文链接:https://www.haomeiwen.com/subject/ojsqkxtx.html