不用递归思想解决汉诺塔问题

0萌萌哒0 2015-08-28 05:48:06
这也是个老梗了。以前也尝试过,写出一个不使用递归、不使用栈、不使用类似递归的结构的汉诺塔问题的代码。

目前的实现可以做到前两点,但是运行期间有一段时间会生成类似递归的调用树,故还是不满意。不知是否有可以同时满足以上条件的代码?

目前的实现程度:

public class NoRecuresive {
public static String move(String from, String to, String via, int num) {
TemplateX tx = new TemplateX();
for(int i = num - 1; i > 0; i--) {
tx = new TemplateX(tx, tx);
}
return tx.fill(from, to, via);
}
public static void main(String[] args) {
System.out.println(move("x", "y", "z", 4));
}
}
class TemplateX {
TemplateX l, r;
public TemplateX(){
l = r = null;
}
public TemplateX(TemplateX left, TemplateX right) {
l = left;
r = right;
if(l == null || r == null) {
throw new RuntimeException("Null");
}
}
public String fill(String from, String to, String via) {
if(l == null || r == null) {
return from + " -> " + to;
} else {
return l.fill(from, via, to) + "\n" + from + " -> " + to + "\n" + r.fill(via, to, from);
}
}
}
...全文
418 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
0萌萌哒0 2015-09-02
  • 打赏
  • 举报
回复
看来这题不是那么容易的。。
三仙半 2015-08-31
  • 打赏
  • 举报
回复
解过汉诺塔,要么就是递归,要么就是自己操作栈,把递归改成递推,离了栈我怎么觉得就不会解汉诺塔啊,坐等高人给科普
解开者 2015-08-31
  • 打赏
  • 举报
回复
其实只要是在处理重复子问题,本质都还是分治,或者递归,或者回溯。区别只是内存开在不同的地方。 这种东西枚举起来没有顺序,不用分治要怎么弄……
江城老金 2015-08-28
  • 打赏
  • 举报
回复
顶你一下,刚知道汉诺塔

62,614

社区成员

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

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