有人可以解释这个递归代码如何反转java中的int工作吗?

use*_*033 2 java recursion

private static int reverse(int n, int r) {
  if (n == 0) return r;
  return reverse(n/10, 10*r+n%10);
}
public static int reverse(int n) {
 return reverse(n, 0);
}
Run Code Online (Sandbox Code Playgroud)

我已经测试了这个并且它有效,我只是无法弄清楚如何.我知道这个数字被除以10然后再次进入循环,但似乎直到n变为小数<1,r根本就没有被使用.救命 ?

sep*_*p2k 5

r从0开始,每次递归调用时,新值r都设置为10*r+n%10.在一个循环中,等价物将是r = 10*r+n%10.

n为0时,返回最终值r(将保存最终结果).

以下是将代码转换为循环的方法:

if (n == 0) return r;
Run Code Online (Sandbox Code Playgroud)

如果n为0,则不再进行进一步的递归.由于函数是尾递归的(即简单地返回每个递归结果的结果),这意味着循环在此结束.所以我们的循环看起来像这样:

while(n != 0) {
}
Run Code Online (Sandbox Code Playgroud)

那么如果n不是0 会发生什么:

return reverse(n/10, 10*r+n%10);
Run Code Online (Sandbox Code Playgroud)

好的,所以循环继续,n/10作为新值n10*r+n%10新值r.所以这是我们得到的循环:

while(n != 0) {
  n = n / 10;
  r = 10*r+n%10;
}
Run Code Online (Sandbox Code Playgroud)