奇偶校验-递归Java

时间:2018-12-09 10:04:16

标签: java recursion parity

我有奇偶校验器问题:二进制字符串是仅包含'0'和'1'字符的字符串。二进制的奇偶校验 字符串定义如下。如果字符“ 1”出现在此字符串中的次数 奇偶校验为0;如果为奇数,则奇偶校验为1。例如,“ 101”的奇偶校验为0,则 “ 10110”的奇偶校验为1,而“ 001001101”的奇偶校验为0。使用签名编写函数

numpy

我设法反复编写它,但是我的递归超出了outOfboundries:

public static int parity(String binaryStr)
//no changes are allowed & only use recursive solution, no loops allowed

递归:

  public static int parity(String binaryStr) {
    int counter = 0;
    for (int i = 0; i < binaryStr.length () ; i++) {
        if (binaryStr.charAt (i) == 49) {
            counter++;
        }
    }
    if ( counter % 2 == 0 ) {
        return 0;
    }
    else {
        return 1;
    }
}

请帮助我更正

1 个答案:

答案 0 :(得分:2)

代码的主要问题是将binaryStr.substring (index++)传递给递归调用,该递归调用将传递原始的String而不是子字符串。因此,您将获得无限递归。您可以使用++index

我建议不要使用static变量,

private static int parity(String binaryStr) {
    if (binaryStr.length() == 0) {
        return 0;
    } else {
        return ((binaryStr.charAt(0) == '0') ? 0 : 1) ^ parity(binaryStr.substring(1));
    }
}

说明:

如果按位XOR(^)的两个操作数相等,则返回0。如果一个操作数为0,另一个为1,则返回1。

这正是您需要的逻辑:

如果第一个字符为'1',其余String的奇偶校验为1(即'1'的奇数),则整个String的奇偶校验为0。

如果第一个字符为'1'并且String的结果具有奇偶校验0(即,偶数'1's, the whole String`的奇偶校验为1。

如果第一个字符为'0',则整个String的奇偶校验与其余String的奇偶校验相同。