递归计算字符串中的多个元音(JavaScript)

时间:2014-10-22 16:51:27

标签: javascript recursion

有谁能告诉我我的代码中出错了什么? 我需要使用递归来计算字符串中元音的出现次数。函数isVowels检查角色是否是元音并且它是否有效。但是下面的代码不起作用......

function countVowels(str) {
    var length = str.length;
    if (length == 0) {
        return 0;
    }
    if (isVowel(str.charAt(length)) == false) {
        return countVowels(str.substring(0, length - 1));
    }
    return 1 + countVowels(str.substring(0, length - 1));
}

1 个答案:

答案 0 :(得分:4)

字符串中的字符 - 就像数组中的元素一样 - zero-indexed。您需要使用.charAt(length-1),或者在字符串结尾后获取字符(产生空字符串)。这应该这样做:

function countVowels(str) {
    var length = str.length;
    if (length == 0) {
        return 0;
    }
    if (isVowel(str.charAt(length - 1)) == false) {
        return countVowels(str.substring(0, length - 1));
    }
    return 1 + countVowels(str.substring(0, length - 1));
}

但是,您可以通过不调用递归部分两次并从前面计算来简化此操作:

function countVowels(str) {
    if (str.length == 0)
        return 0;
    return (isVowel(str.charAt(0)) ? 1 : 0) + countVowels(str.slice(1));
}