程序以递归方式查找二进制数

时间:2017-10-30 20:44:23

标签: java recursion

我一直在研究一种递归解决方案,用于评估数字是否为二进制数。但是我的解决方案总是返回false,我似乎无法使逻辑正确。我的代码如下:

public class Convert{
  public static boolean isBinaryNumber(int binary){
    int temp = 0; 
    boolean status = false;

    if(binary==0 || binary==1) {
        status = true;
        return status;
    }
    else {
        temp =  binary%10;

        if(temp == 1 || temp == 0) {
            binary = binary/10;
            isBinaryNumber(binary);
        }
        else {
            status = false;
            return status;
        }
    }
    return status;
  }

  public static void main(String a[]){
    System.out.println("Is 1000111 binary? :"+ isBinaryNumber(1000111));
    System.out.println("Is 10300111 binary? :"+ isBinaryNumber(10300111));
  }
}

2 个答案:

答案 0 :(得分:4)

    if(temp == 1 || temp == 0) {
        binary = binary/10;
        isBinaryNumber(binary);
    }

应该考虑递归调用的返回值,例如

    if(temp == 1 || temp == 0) {
        binary = binary/10;
        status = isBinaryNumber(binary);
    }

请注意,整个代码可以压缩很多,例如,您可以一致地删除状态变量或早期返回语句。

如果您保持状态并明确涵盖所有情况,我将初始化删除为false,因此编译器能够指出缺少分配的分支。在这种情况下,这可能会指向错误位置。

通过一些进一步的简化,代码可以压缩到

    public static boolean isBinaryNumber(int binary) {
       return binary == 1 || binary == 0 || binary >= 10 &&
           isBinaryNunber(binary / 10) && isBinaryNumber(binary % 10)
    }

答案 1 :(得分:1)

您必须在递归通话前加return。 如果删除最后一个return语句,其余代码将按预期工作。

但是,我做了一些优化(如下所述)。因此,守则应如下所示:

public static boolean isBinaryNumber(int binary){
    if(binary==0 || binary==1) {
        return true;
    }
    else {
        int temp =  binary%10;
        if(temp == 1 || temp == 0) {
            binary = binary/10;
            return isBinaryNumber(binary);
        }
        else {
            return false;
        }
    }
}

我还删除了无用的status变量,因为您只需返回结果而不是将其存储到值而不是返回它。