无法读取简单递归代码(java)

xpszyzbs  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(233)

你好,我正在学习递归,阅读下面的代码有困难

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,打印(13%2),即1
x=6,y=2,打印(6%2)为0
x=3,y=2,打印(3%2),即1
x=1,y=2,打印(1%2),即1
x=0,y=2,因为x==0,所以不返回任何内容并停止递归。
因此1011
解决方案2
x=13,y=2,mysterymethod(13/2,2),这是mysterymethod(6,2),因为6!=0转到下一步
x=6,y=2,mysterymethod(6/2,2),这是mysterymethod(3,2),因为3!=0转到下一步
x=3,y=2,mysterymethod(3/2,2),它是mysterymethod(1,2),因为1!=0转到下一步
x=1,y=2,mysterymethod(1/2,2),它是mysterymethod(0,2),因为0==0不返回任何内容并停止递归。
所以什么也不归还
但正确答案是1101
有谁能看一下代码,解释一下为什么1101是正确的答案,为什么我的解决方案是错误的?

9njqaruj

9njqaruj1#

那是因为你做了递归然后打印数字,你应该先打印数字然后递归,也就是说:

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);
        }
    }

在您的代码中,您正在向后打印数字。。。

相关问题