你好,我正在学习递归,阅读下面的代码有困难
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是正确的答案,为什么我的解决方案是错误的?
1条答案
按热度按时间9njqaruj1#
那是因为你做了递归然后打印数字,你应该先打印数字然后递归,也就是说:
在您的代码中,您正在向后打印数字。。。