奇偶递归java

奇偶递归java,java,recursion,parity,Java,Recursion,Parity,我有奇偶校验问题:二进制字符串是只包含“0”和“1”字符的字符串。二进制的奇偶性 字符串的定义如下。如果字符“1”在此字符串中出现的次数 是偶数,其奇偶性为0;如果是奇数,则奇偶校验为1。例如,“101”的奇偶校验为0,则 “10110”的奇偶校验为1,“001101”的奇偶校验为0。使用签名编写函数 public static int parity(String binaryStr) //no changes are allowed & only use recursive solut

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

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;
    }
}

请帮助我更正它

您的代码的主要问题是将
binaryStr.substring(index++)
传递给递归调用,递归调用将传递原始的
字符串而不是子字符串。因此得到了无限递归。您可以使用
++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));
    }
}
说明:

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

这正是您需要的逻辑:

如果第一个字符是“1”,而
字符串的其余部分具有奇偶校验1(即奇数个“1”),则整个
字符串的奇偶校验为0

如果第一个字符是“1”,并且
字符串的结果具有奇偶校验0(即“1”
s的偶数),则整个
字符串的奇偶校验为1


如果第一个字符是“0”,那么整个
字符串
的奇偶校验与
字符串
其余部分的奇偶校验相同

谢谢你的回答,但我不熟悉“?”,它做什么?它能被If-else替换吗?@Yuki1112是的,a?b:c是三元条件运算符,可以用If-e替换伦敦证券交易所
private static int parity(String binaryStr) {
    if (binaryStr.length() == 0) {
        return 0;
    } else {
        return ((binaryStr.charAt(0) == '0') ? 0 : 1) ^ parity(binaryStr.substring(1));
    }
}