gpt4 book ai didi

java - 无法阅读简单的递归代码(JAVA)

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

您好,我正在学习递归,但在阅读以下代码时遇到问题

public class MysteryClass {

/**
* Mystery method that performs a function recursively.
*
* @param x an integer > 0
* @param y an integer > 0 and < x
* prints result
*/
public static void mysteryMethod(int x, int y) {
if (x == 0) {
return;
} else {
mysteryMethod(x / y, y);
System.out.print(x % y);
}
}

public static void main(String[] args) {
mysteryMethod(13,2);
}
}
我有两种可能的解决方案(并意识到两者都是错误的)
解决方案 1
  • x = 13, y = 2, print(13 % 2) 即 1
  • x = 6 , y = 2, print( 6 % 2) 即 0
  • x = 3 , y = 2, print( 3 % 2) 即 1
  • x = 1 , y = 2, print( 1 % 2) 即 1
  • x = 0 ,y = 2,因为 x == 0,什么都不返回并停止递归。

  • 因此 1011
    解决方案 2
  • x = 13, y = 2, mysteryMethod(13/2, 2) 是 secretMethod(6, 2) 因为 6 != 0 进入下一步
  • x = 6 , y = 2, mysteryMethod(6/2, 2) 是 secretMethod(3, 2) 因为 3 != 0 进入下一步
  • x = 3 , y = 2, mysteryMethod(3/2, 2) 是 secretMethod(1, 2) 因为 1 != 0 转到下一步
  • x = 1 , y = 2, 神秘方法(1/2, 2) 是神秘方法(0, 2) 因为 0 == 0 不返回任何内容并停止递归。

  • 因此什么都不返回
    但正确答案是 1101
    任何人都可以查看代码并解释为什么 1101 是正确答案以及为什么我的解决方案是错误的?

    最佳答案

    那是因为你做了递归然后打印数字,你应该打印数字然后递归,即:

    public static void mysteryMethod(int x, int y) {
    if (x == 0) {
    return;
    } else {
    System.out.print(x % y);//exchange the position of the two lines of code
    mysteryMethod(x / y, y);
    }
    }
    在您的代码中,您正在向后打印数字...

    关于java - 无法阅读简单的递归代码(JAVA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64867648/

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