程序难以理解

use*_*986 4 java

我有一个程序,我不明白它的结果.它给了我110,但我不知道它怎么可能.我只称它一次.对我来说,它应该是3 ?? 谢谢

public class Test {
    public static String operator (int n) {
        return((n == 0) ? "" : operator(n / 2) + (n % 2));
    }

    public static void main(String[] args) {
        System.out.println(operator(6));
    }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*d W 6

此函数中的递归导致使用每次迭代附加的原始参数的模数重复计算中间值.所以跟随运算符的扩展(6)

  1. operator(6)=> operator(6/2)+(6%2)= operator(3)+"0"
  2. operator(3)=> operator(3/2)+(3%2)= operator(1)+"1"
  3. operator(1)=> operator(1/2)+(1%2)= operator(0)+"1"
  4. operator(0)=>""

递归在第4次迭代结束,展开的结果变为"110"