有谁能告诉我我的代码中出错了什么? 我需要使用递归来计算字符串中元音的出现次数。函数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));
}
答案 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));
}