java笔试递归怎么写_Java递归笔试题

Java递归笔试题

今天在练习Java笔试题的时候,遇到了一个递归题目,一开始的时候被绕了进去,后来才想明白是一个参数进栈的问题

public class test1 {

public static void main(String[] args) {

split(12);

}

public static int split(int number) {

if (number > 1) {

if (number % 2 != 0) System.out.print(split((number + 1) / 2));

System.out.print(split(number / 2));

}

return number;

}

}

这个题考察的是方法进栈与出栈的顺序,先进后出

有个知识点,方法在出栈的时候,执行的是return语句。因为出栈就意味着方法结束并消费,如果没有return语句,那么方法出栈的时候什么都不执行,就直接销毁。

1.执行split(12)时,执行代码System.out.print(split(number / 2))

split(12/2)进栈,此时number=6;

2.执行split(6)时,执行代码System.out.print(split(number / 2))

split(6/2)进栈,此时number=3;

3.执行split(3)时,

1

2

3

第1行 if (number % 2 != 0)

第2行 System.out.print(split((number + 1) / 2));

第3行 System.out.print(split(number / 2));

按照顺序执行

先执行第2行

首先split((3+1)/2)进栈,此时number=2,

再执行split(2),那么split(2/2)进栈,此时number=1, 最后return 1,

注意此时第2行代码还没有结束

此时

split(2/2)出栈,输出1;

split((3+1)/2)出栈,输出2;

第二行代码结束,再执行第三行,此时number=3,执行System.out.print(split(number / 2))

split(3/2)进栈,number=1,return,那么就需要出栈了

split(3/2)出栈,输出1

split(6/2)出栈,输出3

split(12/2)出栈,输出6;

最终结果12136;

split(number)方法,最终返回的是number这个值,所以split(n)出栈的输出结果就是n

整理:

split(12/2)进栈

split(6/2)进栈

split((3+1)/2)进栈

split(2/2)进栈

split(2/2)出栈,输出1

split((3+1)/2)出栈,输出2

split(2/2)进栈

split(2/2)出栈,输出1

split(6/2)出栈,输出3

split(12/2)出栈,输出6

f24bd9513203f643603a5cade69a08cd.png

4a668feaa3018a2e1706f07e5002bcc8.png

JokerCaesar6

发布了1 篇原创文章 · 获赞 2 · 访问量 52

私信

关注

标签:出栈,递归,笔试,number,split,print,Java,进栈,out

来源: https://blog.csdn.net/qq_41600383/article/details/104074778

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值