请大侠们帮我解释一下Hanoi塔的递归的这两个句子

baojunling2008 2009-03-18 04:14:36
请大侠们解释一下这个Hanoi塔的两个move的句子
最好用一个数的流解释一下 比如n==4
import java.io.*;

public class Hanoi {
public static void main(String args[]) throws IOException {
int n;
BufferedReader buf;
buf = new BufferedReader(new InputStreamReader(System.in));

System.out.print("请输入盘数:");
n = Integer.parseInt(buf.readLine());

Hanoi hanoi = new Hanoi();
hanoi.move(n, 'A', 'B', 'C');
}

public void move(int n, char a, char b, char c) {
if(n == 1)
System.out.println("盘 " + n + " 由 " + a + " 移至 " + c);
else {
move(n - 1, a, c, b);//请解释
System.out.println("盘 " + n + " 由 " + a + " 移至 " + c);
move(n - 1, b, a, c);//请解释
}
}
}
...全文
106 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dantin 2009-04-18
  • 打赏
  • 举报
回复
恩,楼上几位说的很清楚了,我只能顶一下了
jinxfei 2009-04-17
  • 打赏
  • 举报
回复
楼上的说的很清楚了,
我说一句递归:
递归就是将大规模的问题化为类似的小规模问题,一直简化到只用一步或者非常简单的操作就可以完成。

汉诺塔就很典型,1个是最简单的,只需要移动一次就可以了,
而n个的情况,相当于先移走n-1个到临时的位置,再移动剩下的1个到目标位置。
sf0212 2009-04-14
  • 打赏
  • 举报
回复
public void move(int n, char a, char b, char c) {
if(n == 1)
System.out.println("盘 " + n + " 由 " + a + " 移至 " + c);
else {
move(n - 1, a, c, b);//把n-1个盘子 经过c 移动到b, 此时a只有一个盘子
System.out.println("盘 " + n + " 由 " + a + " 移至 " + c);
move(n - 1, b, a, c);//把b上的n-1个盘子 经过a移动到c,此时所有的盘子都从a移动到c了
}
}
baojunling2008 2009-03-18
  • 打赏
  • 举报
回复
可是我还是推不出来啊
很是郁闷啊
Dragon_sxw 2009-03-18
  • 打赏
  • 举报
回复
楼主可以分别输入1, 2, 3 , 对着结果很容易就明白怎么回事了

就是递归嘛

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧