gpt4 book ai didi

Java - 递归

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

以下是我对 AP 计算机科学问题的改编。书上说应该打印00100123我认为它应该打印 0010012但下面的代码实际上打印了 3132123

这是怎么回事?而且它似乎没有任何停止条件?!

public class Mystery {

public static void main(String[] args) {
int n;
n = 3;
mystery(n);
}

public static void mystery(int n) {
int k;
for (k = 0; k < n; k++) {
mystery(k);
System.out.print(n);
}
}
}

实际问题如下:考虑以下方法。

public void mystery (int n)
{
int k;
for (k=0 ; k < n ; k++)
{
mystery(k);
System.out.print(n);
}
}

调用 Mystery (3) 返回什么值?

我现在明白循环形成了停止条件,我想我理解 jhamon 的评论“最后一条指令是打印 n。n 是 3,它不可能只打印 '0010012'”,但我不明白为什么书上说应该打印 00100123。

正如Batsheba所说,我在调试时尝试观察变量,但书上说它应该打印00100123。非常感谢jhamon更正的代码,所以从我看来这本书是错误的?

最佳答案

该程序无法打印“0”。它打印 n ,如果 n为 0 则永远不会达到 System.out.print(n)线。该行位于 for 内声明 k<n

正如其他人在评论中指出的那样, for 中的条件循环也是停止条件。 mystery将递归地调用自身 n次。但是,在每个调用中,参数都较小。
(为了好玩,尝试将条件更改为 k <= n 。然后它不会终止,因为参数较小或等于)。

如果将该行更改为 print(k) ,这可能是预期的,它确实会打印“0010012”。这是一个ideone link来证明这一点。

关于Java - 递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43251982/

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