程序难以理解

时间:2015-05-18 16:49:33

标签: 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));
    }
}

3 个答案:

答案 0 :(得分:6)

此函数中的递归导致使用每次迭代附加的原始参数的模数重复计算中间值。因此,请遵循operator(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)=> ""
  5. 递归在第4次迭代结束,展开的结果变为" 110"

答案 1 :(得分:3)

这是一个简单的递归方法,可以这样表达,使其更具可读性:

true

遵循这些规则,<preference name="Fullscreen" value="true" /> 如下:

operator(0) = ""
operator(n) = operator(n / 2) + (n % 2)

答案 2 :(得分:0)

operator返回一个字符串。因此operator(n/2)+(n%2)的结果是将operator(n/2)中的字符串与(n%2)的值进行相加(连接),该值会自动转换为字符串,以便可以连接它。

尝试更改operator以返回int并将该行更改为:

return((n == 0) ? 0 : operator(n/2)+(n%2));