0
public static void solveTowers(int disks, int sourcePeg, int destinationPeg, int tempPeg)
{
    //always set the base case in any type of recursion programs
    if(disks == 1)
    {
        System.out.printf("\n%d --> %d", sourcePeg, destinationPeg);
        return;
    }

    //call the method itself
    solveTowers(disks - 1, sourcePeg, tempPeg, destinationPeg);

    System.out.printf("\n%d --> %d", sourcePeg, destinationPeg);

    solveTowers(disks - 1, tempPeg, destinationPeg, sourcePeg);
}

我的问题是第一个 System.out 语句下的“返回”是什么?

调试时,第solveTowers一种方法到达基本情况后,即磁盘== 1,进入if语句,到达后return;,进入第二System.out条语句,然后是second solveTowers方法,所以问题是为什么return;跳过但first solveTowers不是第二个?

4

4 回答 4

4

return语句一旦到达就结束函数或方法的执行。

由于这个方法的返回类型是void,所以不需要返回值来结束函数,可以像这样简单地调用:return;

如果返回类型不同(例如整数),它必须返回一个像这样的整数:return 1;

于 2013-01-22T10:55:25.680 回答
4

return;就是说,如果您只有一个磁盘,则无需执行任何操作,因此您只需结束方法的执行并返回它即可。这是必需的,因为该方法正在处理递归,您必须担心基本情况。

并且由于该方法的返回类型为 void,因此您不需要返回任何值。所以就return;

于 2013-01-22T10:55:38.397 回答
1

return是一个 Java 语句,它从当前方法返回,而不执行它后面的任何代码。

在您的情况下,代码会检查是否只有一个磁盘可用,如果是,它只会打印解决方案并阻止执行其余方法。

于 2013-01-22T10:55:17.617 回答
1

当您只有 1 个磁盘时,它需要停止执行,这就是它输出源和目标并退出的原因。

于 2013-01-22T10:56:30.310 回答