汉诺塔(hanoiTower)问题
前言:承认自己的无知和能力不足,一点一点来积累、训练自己,不着急不害怕不要脸。
一、汉诺塔问题代码
import java.util.Scanner;
public class HanoiTowerRecursion{
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
int num = myScanner.nextInt();
Hanoi obj1 = new Hanoi();
obj1.move(num, 'A', 'B', 'C');
}
}
class Hanoi{
//move()函数功能定义:
//完成将num个圆盘从a柱借助于b柱移动到c柱上
public void move(int num,char a,char b,char c){
//如果只有一个盘,num=1,递归出口
if(num==1){
System.out.println(a + "->" + c);
}else{
//如果柱上存在多个盘,可以看成两个盘:
//最下面的以及在这之上的所有盘(num-1)。
//操作步骤:
//(1)先把a柱“上盘”移动到b塔上,借助于c柱
move(num-1, a, c, b);
//(2)再把a柱“下盘”移动到c柱
System.out.println(a + "->" + c);
//(3)最后把b柱上的所有盘移动到c柱上,借助于a柱
move(num-1, b, a, c);
}
}
}
二、汉诺塔问题分析
1.汉诺塔问题与或结点图
2.汉诺塔问题递归思想
补充: 与或结点图
或结点
与结点
==========Over.