You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何用递归实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:15:35