递归调用--汉诺塔

原创 2015年11月17日 19:41:16

来自学习笔记

def move(n,a,b,c):
    if n ==1:
        print('move',a,'-->',c)
        return
    move(n-1,a,c,b)
    print('move',a,'--->',c)
    move(n-1,b,a,c)

move(3,'A','B','C')

输出为
move A –> C
move A —> B
move C –> B
move A —> C
move B –> A
move B —> C
move A –> C

(1) 一定要理解递归的内涵。当你定义好一个递归函数的时候,你一定要明白这个递归函数的作用。例如在这个问题中move(n,a,b,c)就代表着有n个盘需要从a通过b的帮助来移动到c;而且注意这里的第2,3,4个参数是变量,代表着柱子的名字。move(5,m,n,k)就代表有3个柱子分别叫做m,n,k,我需要把5个盘子从m通过n移动到k

(2) 这里可以把顶部的n-1个盘子看成一个整体,这样这个问题就变成只要解决2个盘子的问题了,步骤自然是只要3步即可。由于我们把其中的n-1个盘子看成了整体,所以每次要对这n-1个盘子进行操作的时候就要使用递归函数。因为n-1个盘子不是随便就能移动的。这就是使用递归函数的时机

(3) 有人可能会问为什么不把底部的n-1个盘子看成一个整体来移动?这是因为汉诺塔的规则限制,小盘子必须放在大盘子上面。如果你把底部n-1个盘子看成整体来递归操作,会发现违反这种规则的情况,所以是不建议这么做的

用python3递归法解决汉诺塔问题

汉诺塔问题: 从左到右 A  B  C 柱 大盘子在下, 小盘子在上, 借助B柱将所有盘子从A柱移动到C柱, 期间只有一个原则: 大盘子只能在小盘子的下面. 如果有3个盘子, 大中小号, 越...
  • NOT_GUY
  • NOT_GUY
  • 2017年05月31日 21:30
  • 501

汉诺塔(递归调用)

汉诺塔 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 汉诺塔(又称河内塔)问题是印度的一个古老的传说。 开天辟地的神勃拉...
  • Weirdo_O
  • Weirdo_O
  • 2017年03月24日 19:09
  • 243

递归函数的调用过程,以汉诺塔为例

public class HanoiTowers { public static void main(String[] args) { towers(3, 'A', 'B', 'C'); } pu...
  • u013517229
  • u013517229
  • 2014年01月21日 13:02
  • 873

递归调用:汉诺塔

题目:编程解决汉诺塔问题,使用数据结构栈(偷个懒,如果不知道汉诺塔是什么,请自行Google) 解答一:递归调用 汉诺塔是个非常经典的问题,讲递归时应该都会讲到它。如果我们没有递归的先验知识, 直接去...
  • wangbaochu
  • wangbaochu
  • 2016年12月29日 10:25
  • 453

递归调用(汉诺塔)

递归调用的两个准则是:一要保持原是问题的形式,逐步降低复杂度。二是最简单的情况可以直接解决。 汉诺塔的算法原理:...
  • sinat_22013331
  • sinat_22013331
  • 2015年05月08日 11:22
  • 274

(优秀汉诺塔算法)对汉诺塔经典递归问题的理解与讲解(部分引用大神代码,附链接。)

博客大神的优秀汉诺塔代码:喜欢特别冷的冬天下着雪   (侵权联系) 本文只是在大神思路的基础上加以理解。 [cpp] view plain copy  print? ...
  • Fighting_Potato
  • Fighting_Potato
  • 2016年10月10日 17:55
  • 970

递归函数的经典例子(汉诺塔问题)

#include void HN(int n,char a,char b,char c); int main(int argc,char *argv[]) {  int Dish_num; ...
  • u014100559
  • u014100559
  • 2015年06月22日 13:36
  • 1369

汉诺塔--c语言递归问题

Description 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把...
  • stary_yan
  • stary_yan
  • 2015年11月16日 14:06
  • 2205

递归调用(实现汉诺塔)

代码实现: import java.io.IOException; import java.io.InputStreamReader; public class HuoNuoTa { ...
  • DT235201314
  • DT235201314
  • 2016年03月21日 21:49
  • 628

汉诺塔问题与递归调用

递归调用的定义是:在调用一个函数的过程中又要直接或间接调用这个函数本身。 基本形式如:int f() { ...... x = f(); ...... } 我认为递归就像是一个走楼梯的过程,每两...
  • MTOY_320
  • MTOY_320
  • 2017年11月09日 17:55
  • 43
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:递归调用--汉诺塔
举报原因:
原因补充:

(最多只允许输入30个字)