将迭代函数转换为递归

时间:2016-10-14 16:52:01

标签: java recursion

java version "1.8.0_92"

您好,

我正在尝试将使用迭代的此函数转换为递归函数。

  public static String bitConversion(int x) {
        List<Integer> binaryList = new ArrayList<Integer>();

        while(x > 0) {
            binaryList.add(x % 2);
            x /= 2;
        }

        StringBuilder stringBuilder = new StringBuilder();
        for(Integer binary : binaryList) {
            stringBuilder.append(binary.toString());
        }

        return stringBuilder.toString();
    }

我的尝试就是这个

  public static String bitConversion(int x) {
        List<Integer> binaryList = new ArrayList<Integer>();

        if(x <= 0) {
            StringBuilder stringBuilder = new StringBuilder();
            for(Integer binary : binaryList) {
                stringBuilder.append(binary.toString());
            }

            return stringBuilder.toString();
        }
        else {
            binaryList.add(x % 2);
            return bitConvert(x / 2);
        }
    }

有一件事是我需要使用binaryList来添加Integer。在完成所有事情的第一个条件中,我需要将它们放入一个字符串构建器中。在第二个条件中,我需要将它们添加到列表中。所以List必须是全局的两种条件。但是当函数调用自身时,每次都会重新初始化List。

关于编写这种递归函数的最佳方法有什么建议吗?

非常感谢任何建议。

3 个答案:

答案 0 :(得分:5)

基本上,递归你有2个部分:1)递归终止条件2)你将手头的任务拆分成较小的部分而不是编写结果的部分。

public static String bitConversion(int x) {
    // just simplifying my life here as negative numbers can be represented
    // in a few ways and usually it's additive code I don't want to deal
    // with here :)
    if (x < 0) {
        throw new IllegalArgumentException("Not implemented for negatives");
    }

    // recursion termination condition for 0 and 1
    if (x <= 1) {
        return String.valueOf(x);
    }

    // recurision
    int leastSignificantBit = x % 2;
    String significantBits = bitConversion(x / 2);
    return significantBits + leastSignificantBit;
}

答案 1 :(得分:3)

public static String bitConversion(int x) {
    if (x <= 0) return "";
    else return x % 2 + bitConversion(x / 2);
}

上面的这个怎么样。坏的是它不使用StringBuilder。但是你可以实现类似的返回StringBuilder,然后用另一个方法将.toString中的调用包装起来。

答案 2 :(得分:2)

您的递归结束条件是x == 0,然后返回空字符串。当x> 0,你应该递归地调用x / 2的方法。

那么,这样的事情呢?

public static String bitConversion(int x) {
    if (x == 0) {
        return "";
    }
    return (x % 2) + bitConversion(x / 2);
}