java数位倒置递归_有人能解释一下这个递归代码如何在java中反转int吗?

r根本不用

10*r+n%10

实际上,这是一件很棘手的事情,而且很酷。

这是一个很好的例子,说明变量命名不当会使代码难以理解。我们有3行代码可以实际执行某些操作,但它的工作原理并不明显。

private static int NOTHING_REVERSED_SO_FAR = 0;

private static int reverse(int numberToBeReversed, int reversalSoFar) {

if (numberToBeReversed == 0) return reversalSoFar;

return reverse(numberToBeReversed/10, 10*reversalSoFar + numberToBeReversed%10);

}

public static int reverse(int numberToBeReversed) {

return reverse(numberToBeReversed, NOTHING_REVERSED_SO_FAR);

}

所以我们首先调用public方法。假设我们通过123作为数字的倒数。这将调用未经更改传递123的私有版本,并将reversalSoFar初始化为0。

所以马上,你就可以看到,如果numberToberVersed是0,我们就返回到目前为止计算出的值。我建议您编写一个junit测试来挑战他的断言。

所以当我们递归的时候,我们到底在做什么?首先,我们并不是真的把数字除以10。我们在做分区,通过

递归地。未更改反向的数字。

分割结果为123->123/10->12。(由于是int数据类型,分数丢失了。)好的,我们将传递一个12作为第一个参数。第二个论点呢。我们知道我们通过了0的逆转。所以我们有10*(0)+(123)%10。123在这里是正确的,因为我们没有改变数字。结果是3。所以我们将再次递归,通过12和3。

现在,进行下一次迭代。

0. 123 0

1. 12 3

2. ?? ?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值