【Python学习之七】递归

您所在的位置:网站首页 python中递归函数的编写方法 【Python学习之七】递归

【Python学习之七】递归

2023-08-04 06:03| 来源: 网络整理| 查看: 265

汉诺塔问题

       汉诺塔的移动可以用递归函数非常简单地实现。请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A、B、C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的方法。

  汉诺塔问题的实现关键是理解递归的本质。递归问题的关键个人认为是,重目的而略过程。利用递归,我们不需要了解搬移盘子的过程。只需要知道,我们的目的是按照顺序和规则把盘子从A柱放到C柱。于是编写一个函数,move(n, a, b, c)。可以这样理解:move(盘子数量, 起点, 缓冲区, 终点)。

分析函数要执行的步骤:

1、A上只有一个盘子的情况,直接搬到C,代码如下: if n == 1: print(a, '-->', c) 2、A上不止有一个盘子的情况     2.1 首先,需要把n-1个盘子搬到缓冲区B柱子。打印出的效果是:a --> b。

      move(n - 1, a, c, b) 

  2.1  再把最大的盘子搬到C柱子,也是最大尺寸的一个。打印出:a-->c。

     move(1, a, b, c) 

  2.2 最后,把剩下B柱的n-1个盘子搬到C上,此时缓冲区变成了起点,起点变成了缓冲区。

     move(n - 1, b, a, c) 

3、完整的代码十分简洁,如下所示: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2018-05-22 16:22:13 # @Author : Chen Jing ([email protected]) # @Link : https://github.com/Cjvaely # @Version : $Id$ # 汉诺塔的移动可以用递归函数非常简单地实现 # 需求:打印出把所有盘子从A借助B移动到C的方法 def move(n, a, b, c): if n == 1: print(a, '-->', c) else: move(n - 1, a, c, b) move(1, a, b, c) move(n - 1, b, a, c) # 期待输出: # A --> C # A --> B # C --> B # A --> C # B --> A # B --> C # A --> C move(3, 'A', 'B', 'C')

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3