求助:如何用递归实现frequentVowelCounter统计数组高频元音
递归实现数组单词元音频率统计函数的解决方案
原基准条件的问题
你写的if (word.length != vowel)逻辑完全错误:word是输入的单词数组,vowel是元音数组,两者长度没有可比性,这根本不是递归的终止条件。递归的终止点应该是所有单词都处理完毕的时候。
正确的递归实现代码
const vowel = ['a', 'e', 'i', 'o', 'u']; function frequentVowelCounter(words, count = {}) { // 基准条件:所有单词处理完成,统计并返回结果 if (words.length === 0) { let maxFreq = 0; let mostFrequentVowel = ''; // 遍历元音列表,找出频率最高的元音 for (const v of vowel) { if (count[v] && count[v] > maxFreq) { maxFreq = count[v]; mostFrequentVowel = v; } } return mostFrequentVowel; } // 处理当前第一个单词 const currentWord = words[0]; for (const char of currentWord.toLowerCase()) { if (vowel.includes(char)) { count[char] = (count[char] || 0) + 1; } } // 递归处理剩余单词数组 return frequentVowelCounter(words.slice(1), count); } // 测试示例 console.log(frequentVowelCounter(['cat', 'rain', 'dorm', 'apple', 'sun'])); // 输出 'a'
核心逻辑说明
- 基准条件:当输入的单词数组长度为0时,说明所有单词的元音都统计完毕,此时遍历
count对象找出频率最高的元音,无元音则返回空字符串。 - 递归步骤:每次取出数组的第一个单词,遍历其每个字符(转小写保证大小写不敏感),将元音的出现次数更新到
count对象中,然后递归调用函数处理剩下的单词数组。 - 结果统计:只遍历预设的元音列表,确保不会统计到非元音字符,同时保证如果多个元音频率相同,会返回列表中最先出现的那个(比如a和e频率相同,会返回a)。
内容的提问来源于stack exchange,提问作者Aaliyah Sade
相关产品推荐
相关产品推荐

