谁能给我讲解一下这段java代码?

来源:百度知道 编辑:UC知道 时间:2024/05/26 21:40:02
class HanoiTower
{
static void moves(char i,char j)
{
System.out.println("From "+i+" To "+j);
}

static void hanoi(int n,char a,char b,char c)
{
if(n==1)
{
moves(a,c);
}
else
{
hanoi(n-1,a,c,b);
moves(a,c);
hanoi(n-1,b,a,c);
}
}

public static void main (String[] args)
{
int n;
n=Integer.parseInt(args[0]);
hanoi(n,'A','B','C');
}
}

讲解的越细越好

public class HanoiTower {
//次方法用于显示输出
static void moves(char i, char j) {
System.out.println("From " + i + " To " + j);
}
//汉诺塔递归函数n 表示层数,a,b,c表示塔盘,a是起始塔盘,c是目的塔盘,b是移动中用于暂时放置塔层的塔盘
//目的是借助b将a盘上的n层移动到c上,而且每层塔位于塔盘上时只能是上小下大 类似: -
// --
// ----
static void hanoi(int n, char a, char b, char c) {
//只有一层的话直接由a移动到c,无须借助b
if (n == 1) {
moves(a, c);
} else {
//如果不止一层,先把上面的n-1层借助c从a移动到b上,递归调用自身
hanoi(n - 1, a, c, b);
//把最底下最大的一层由a移动到c上
moves(a, c);
//此时b上有n-1层再借助a移动到c上,递归调用自身
hanoi(n - 1, b, a, c);
}
}

public static void main(String[] args) {
int n = 5;//假设有5层
//n = Integer.parseInt(args[0]);
hanoi(n, 'A', 'B', 'C');
//测试
//大一学C++讲函数用的就是这题目,老师叫板谁如果会就别来上课了,现在看看其实也没什么-_-!~...
}
}

很简单,汉诺塔,很古老,但是很有趣,在 HanoiTo