gpt4 book ai didi

java - 汉诺塔显示输出。如何显示第一个递归调用的 1 个选项卡、第二个递归调用的 2 个选项卡等?

转载 作者:行者123 更新时间:2023-11-30 05:58:31 27 4
gpt4 key购买 nike

我的任务是添加一堆打印语句来显示汉诺塔的完整输出,以查看和了解它在幕后所做的事情,而不是仅仅给您最终结果.

class TowersApp {
static int nDisks = 3;
public static void main(String[] args) {


doTowers(nDisks, 'A', 'B', 'C');
}

public static void doTowers(int topN, char from, char inter, char to) {
int i = 0;

if(topN==1) {
System.out.println("Enter (" + topN + " disk): " + "s=" + from + ", i=" + inter + ", d=" + to);
System.out.println("Base case: move disk " + topN + " from " + from + " to "+ to);
System.out.println("Return (" + topN + " disk)"); }
else {
System.out.println("Enter (" + topN + " disks): " + "s=" + from + ", i=" + inter + ", d=" + to);
doTowers(topN-1, from, to, inter);
System.out.println("Move bottom disk " + topN +
" from " + from + " to "+ to);
doTowers(topN-1, inter, from, to);
System.out.println("Return (" + topN + " disks)");

}
}
}

这是我的输出。我唯一缺少的是缩进。我需要有 1 个选项卡用于第一级递归,2 个选项卡用于第二级递归,依此类推...这就是我的意思:

当前输出:

Enter (3 disks): s=A, i=B, d=C
Enter (2 disks): s=A, i=C, d=B
Enter (1 disk): s=A, i=B, d=C
Base case: move disk 1 from A to C
Return (1 disk)
Move bottom disk 2 from A to B
Enter (1 disk): s=C, i=A, d=B
Base case: move disk 1 from C to B
Return (1 disk)
Return (2 disks)
Move bottom disk 3 from A to C
Enter (2 disks): s=B, i=A, d=C
Enter (1 disk): s=B, i=C, d=A
Base case: move disk 1 from B to A
Return (1 disk)
Move bottom disk 2 from B to C
Enter (1 disk): s=A, i=B, d=C
Base case: move disk 1 from A to C
Return (1 disk)
Return (2 disks)
Return (3 disks)

期望的输出:

Enter (3 disks): s=A, i=B, d=C
Enter (2 disks): s=A, i=C, d=B
Enter (1 disk): s=A, i=B, d=C
Base case: move disk 1 from A to C
Return (1 disk)
Move bottom disk 2 from A to B
Enter (1 disk): s=C, i=A, d=B
...................................

我是否需要某种计数器来“计算”我进入该函数的次数?但是,这是否可以通过递归实现呢?也许我分析过度了,什么时候有一个更简单的解决方案来解决这个问题?

最佳答案

最简单(尽管可能不优雅)的方法是将递归深度作为函数的整数参数传递,并随着每个新的深度级别递增它:

public static void doTowers(int topN, char from, char inter, char to, int depth)

....

doTowers(..., depth + 1)
doTowers(..., depth + 1)

0 开始,以加深主函数的深度。然后,只需为每个深度打印一个\t

关于java - 汉诺塔显示输出。如何显示第一个递归调用的 1 个选项卡、第二个递归调用的 2 个选项卡等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4247486/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com