首页 > 试题广场 >

给定以下方法声明,调用执行mystery(1234)的输出结

[单选题]
给定以下方法声明,调用执行mystery(1234)的输出结果?
//precondition:  x >=0
public void mystery (int x)
{
System.out.print(x % 10);

if ((x / 10) != 0)
{
mystery(x / 10);
}
System.out.print(x % 10);
}


  • 1441
  • 43211234
  • 3443
  • 12344321
这个题目是考递归,总共调用了4次mystery方法,注意:程序是从上往下执行的,所以当一个方法,调用另一个或本方法时,程序会等调用完毕以后在接着执行
1.第一次调用mystery方法,此时参数(x)为1234,进入第四行,x不变为x=1234,1234%10=4,输出 4

2.接着进入if语句,1234/10=123 !=0,进入if语句,此时x还是1234,接着第二次调用mystery方法此时第一次调用的方法不会继续执行,会等第二次(本次)调用的方法执行完毕后继续执行),mystery(x/10),传入的参数(x)为123,然后第四行123%10=3,参数还是不变为123,输出 3

3.接着进入if语句,第三次调用mystery()方法此时第二次调用的方法不会继续执行,会等第三次(本次)调用的方法执行完毕后继续执行)传入参数为123/10=12, x=12,接着第四行12%10=2,传入的参数值不会变,输出 2

4.然后进入if语句12/10!=0,第四次调用mystery()方法此时第三次调用的方法不会继续执行,会等第四次调用的方法(本次)执行完毕后继续执行),传入的参数(x=1)为1,进入第四行1%10,输出 1

5.然后进入if语句1/10=0不满足if语句x/10 != 0,所以本次不会继续调用mystery方法,然后程序继续执行调用下面的输出参数为1,1%10,输出 1
6.然后第四次调用的方法执行结束然后返回第三次调用的方法继续执行,调用下面的输出,参数为12,x%10=2,输出 2

7.然后第三次调用的方法执行结束然后返回第二次调用的方法继续执行,此时调用下面的输出,参数为123,x%10=3,输出 3

8.最后第二次调用的方法执行结束然后回第一次调用的方法继续执行,此时调用下面的输出,参数为1234,x%10=4,输出 4

9.第一次调用方法结束
发表于 2019-08-28 12:56:13 回复(11)
优先会输出1234%10=4,选B。后面不用看了
发表于 2020-03-12 21:17:46 回复(8)
递归严格把握一点就不会出错:递归的实现就是借助于系统为我们程序运行提供的栈来实现的。栈的特性决定了递归函数先进后出的特性。
发表于 2020-05-20 15:48:05 回复(3)

这题怎么也得不到B选项啊

发表于 2019-08-17 11:55:33 回复(3)
Java 中有除法运算(/)和取余运算(%)。
 
如果是两个int相除,取整除部分,忽略余数;
如果是两个int取余,取余数部分,忽略整除。
 
如:
public static void main(String[] args) {
        int m = 5;
        int n = 2;
        System.out.println("整除:" + (m / n)); // 结果为 2
        System.out.println("取余:" + (m % n)); // 结果为 1
    }
发表于 2020-01-16 09:35:59 回复(0)
x求余10,1234%10=4,秒选B
发表于 2022-01-13 11:53:49 回复(0)

新增的题啊。排除法4321,直接选B咯

发表于 2019-08-15 23:41:39 回复(0)
发表于 2019-12-14 20:38:47 回复(0)
递归算法,首先输出%结果,然后判断if中/结果是否等于0,等于0就递归调用本方法。所以是输出4,递归,以此类推,到输出1的时候,不在满足if,执行第二个输出语句输出1,以此类推。所以最终结果43211234。手机打字,不怎么方便,大体思路就是这样!
发表于 2019-08-17 15:53:41 回复(2)
debug见真章
发表于 2023-08-22 14:06:53 回复(0)
第一个是4的只有一个。。。
发表于 2022-11-21 10:24:17 回复(0)
感觉 没必要大题小做 题目看上去大 要论做快题 可以技巧秒选,
发表于 2022-10-19 11:38:32 回复(0)
根据递归4321排除出来的,但是后边输出1234的过程有点迷糊了
发表于 2022-10-08 14:29:16 回复(0)
虽然很简单,但是谁教你写的代码?
发表于 2022-08-12 19:50:43 回复(0)
注意呀
发表于 2021-09-01 23:47:39 回复(0)
整除10递归调用,分析每一次打印最后一位,先依次正向打印最后一位4321再由1反向每次增1位打印,既1234
发表于 2021-05-13 00:48:36 回复(0)
递归
发表于 2021-04-28 06:58:40 回复(0)
递归。在执行完方法内的mystery(1)后,会继续执行后面的system.out.println(1%10)。依次类推,有的43211234
编辑于 2021-03-30 10:46:34 回复(0)
吐辽,还在那算1234除以十等于多少呢
发表于 2021-03-21 23:36:04 回复(0)
<p>逻辑思路</p>
发表于 2021-01-02 13:44:08 回复(0)