gpt4 book ai didi

java - 汉诺塔计划为何有效?

转载 作者:行者123 更新时间:2023-12-02 12:11:24 24 4
gpt4 key购买 nike

我是一个编码新手,我正在开发一些简单的小型项目,以更加熟悉 java。当我遇到这个汉诺塔代码时。

public class TowersOfHanoi {

public void solve(int n, String start, String auxiliary, String end) {
if (n == 1) {
System.out.println(start + " -> " + end);
} else {
solve(n - 1, start, end, auxiliary);
System.out.println(start + " -> " + end);
solve(n - 1, auxiliary, start, end);
}
}

public static void main(String[] args) {
TowersOfHanoi towersOfHanoi = new TowersOfHanoi();
System.out.print("Enter number of discs: ");
Scanner scanner = new Scanner(System.in);
int discs = scanner.nextInt();
towersOfHanoi.solve(discs, "A", "B", "C");
}
}

我明白这个谜题是如何运作的;但是,我不明白这段代码如何知道将塔的各个部分移动到哪里,而不违反较大的部分不能放在较小的部分之上的规则。此外,由于我对代码的理解非常薄弱,我认为 if (n==1){ 不成立,然后它会转向 else。但相反,即使我输入的 n 值不是 1,代码也会直接利用 if 语句下的信息跳转到其下方的 else 行。

例如,如果我的 scanner 输入为 4,那么按照我之前的理解,代码会将 scanner 的输入设置为 int 光盘 并将其汇集到 towersOfHanoi.solve(discs,"A", "B", "C");。那么这是否意味着当程序调用 .solve 方法时 int n 将等于 4 ?代码是否会再次检查是否 if(n==1){ 它不应该...因为我认为它会是 (4==1).

我确实知道这是问题的递归解决方案,但这真的会影响java处理代码的规则吗?

附注如果我使用了任何错误的术语或者如果我不够清楚,我很抱歉,我正在自学,所以我没有其他人来问我的问题......而且我没有制作这段代码,我找到了它在一个网站上,该网站提供了该难题的递归版本的 java 源代码解决方案。

最佳答案

I thought that if (n==1){ was not true then it moves on to the else. But instead of that even when I enter values for n that aren't 1 the code moves to utilize the information directly under the if statement

除非链式输入的值减少到 1,否则您的输入将保持不变,因为以下语句,例如:-

solve(n - 1, start, end, auxiliary);
<小时/>

假设您提供 n =3,

在第一次迭代时,控制权移至 else 并使用

调用相同的方法
solve(2, start, end, auxiliary)

在第二次迭代时,它到达 else 并再次调用

solve(1, start, end, auxiliary) // and you know this would reach if(n==1) next time
<小时/>

上述迭代是递归的效果,其中您使用不同的值从内部调用相同的方法。声明

if(n==1)

正是递归的尾部,并且必须退出它,因此总是会到达。

关于java - 汉诺塔计划为何有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46518747/

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