递归调用--汉诺塔

原创 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个盘子看成整体来递归操作,会发现违反这种规则的情况,所以是不建议这么做的

自己摸索的汉诺塔递归调用

  • 2010年06月09日 14:15
  • 1KB
  • 下载

学习到栈的时候,利用函数递归调用解决汉诺塔

最近学习到栈的特点,先进后出。再解决汉诺塔问题使用递归函数调用的时候,使用了栈的特点。 算法:通过罗列出几次实验的转移方法,不难发现出,当n=1时,总是从A处将盘子运往C处。当n>1时,则需要通过B...

算法:汉诺塔(栈的递归调用)-数据结构(9)

一、问题描述 参见网上汉诺塔的玩法。书上P54-58。解析:栈的递归调用其实是函数参数是以栈的形式push进栈来调用函数的,因此递归是用到栈的,只是没有很形象而已。解决汉塔的思路是这样的:设n为汉诺...

递归调用(实现汉诺塔)

代码实现: import java.io.IOException; import java.io.InputStreamReader; public class HuoNuoTa { ...

基于递归调用的斐波那契数列和汉诺塔问题

这章博主主要介绍基于递归调用的斐波那契数列和汉诺塔问题的求解,如果同学对递归调用不了解的话请先看博主之前发的一篇《关于递归调用》的文章。首先我介绍一下斐波那契数列,这个数列可以说是非常神奇的数列,数列...

汉若塔问题之递归调用.c

  • 2012年01月26日 10:57
  • 3KB
  • 下载

java实现汉诺例子,递归调用

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public...

摆棋子程序(递归调用实现)

  • 2014年04月23日 17:34
  • 1KB
  • 下载

函数递归调用资料合集

  • 2008年10月28日 10:51
  • 1.3MB
  • 下载

数据结构基础(6)--递归和函数调用--汉诺塔问题C语言实现

C语言实现汉诺塔问题!
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:递归调用--汉诺塔
举报原因:
原因补充:

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