将迭代函数转换为递归

ant*_*009 0 java recursion

java version "1.8.0_92"
Run Code Online (Sandbox Code Playgroud)

嗨,

我试图将这个使用迭代的函数转换为递归函数.

  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();
    }
Run Code Online (Sandbox Code Playgroud)

我的尝试是这样的

  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);
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

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

非常感谢任何建议.

Iva*_*van 5

基本上使用递归,您有两个部分: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;
}
Run Code Online (Sandbox Code Playgroud)