汉诺塔递归问提

Posted 您的名称已被使用

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汉诺塔递归问提相关的知识,希望对你有一定的参考价值。

一、计思想汉诺塔n个盘子的移动问题,基本就三步:①将n-1个盘子从A移到B。②将第n个盘子从A移到C。③将B上的n-1个盘子从B移到C。

所以大体上需要两个函数,一个函数用来记录每一步盘子的移动过程,另一个函数用来实现递归操作(递归终止为剩下一个盘子,直接将盘子从A移到C)。

递归函数是在函数中调用自己,一开始的运算没有完成,却又调用递归函数,一层嵌套一层,直到递归函数的终止,然后在一层一层的输出。

二、程序流程图

三、源程序代码

package hannuota;

import java.util.Scanner;

public class hannuota
{
  public static int quantity=0;//定义移动步数,并赋值为零  
  public static void move(int plate,char a,char b) //盘子每一步的移动位置
  {
    System.out.println("第"+(++quantity)+"次移动:"+"将第"+plate+"个盘子从"+a+"移动到"+b);
    // 将第plate个盘子从a(代号为a,不是A柱)移动到b(同)
  }
  public void process(int n,char a,char b,char c)//移动过程,将n个盘子从a移动到c,b为过渡
  {
    if(n==1) move(1,a,c);//递归终止,n=1,将1盘子从a移到c
    else
    {
    process(n-1,a,c,b);//将n-1个盘子从a移动到b,c为过渡
    move(n,a,c);//将第n个盘子从a移到c
    process(n-1,b,a,c);//将n-1个盘子从b移动到c,a为过渡
    }
  }
  public static void main(String[] args)
  {
    char a=\'A\';
    char b=\'B\';
    char c=\'C\';
    Scanner cin=new Scanner(System.in);
    System.out.print("请输入在A柱子上盘子的个数:");
    int n=cin.nextInt();
    hannuota hannuo=new hannuota();
    hannuo.process(n, a, b, c);
    System.out.println("共移动"+quantity+"次,将所有盘子从A移到C");
    cin.close();
  }
}

 

四、结果截图

                                                                    

以上是关于汉诺塔递归问提的主要内容,如果未能解决你的问题,请参考以下文章

分治算法——汉诺塔问题

汉诺塔内存分析(python)

题目1458:汉诺塔III(不一样的汉诺塔递归算法)

递归中两个经典的汉诺塔和青蛙跳台阶问题

汉诺塔的C语言代码怎么写啊

汉诺塔(Hanoi)图解递归算法