如何优化统计字符串特定字符的递归函数?禁用循环、正则及高级工具
优化递归字符统计函数
原函数存在依赖外部传入初始计数、直接打印结果导致复用性差、边界处理不完善等问题,以下是符合要求的优化实现:
function countSymbolRec(str, symbol) { // 终止条件:空字符串直接返回0,覆盖边界场景 if (str.length === 0) return 0; // 判断最后一个字符是否匹配,匹配则计1,否则计0 const matchCount = str[str.length - 1] === symbol ? 1 : 0; // 递归处理去掉最后一个字符的子串,累加结果 return matchCount + countSymbolRec(str.slice(0, -1), symbol); } // 使用示例 const count = countSymbolRec("lkjkBBSlkl", "B"); console.log(count); // 输出 2
优化细节说明
- 移除外部计数依赖:不再需要调用者传入初始
count参数,函数内部通过递归返回值自动累加,降低调用出错概率 - 返回结果而非直接打印:函数返回统计数值,结果可以被后续代码复用,灵活性更强
- 完善边界处理:新增空字符串的终止判断,避免原函数处理空输入时出现的
undefined判断问题 - 逻辑更清晰:每一步的计数逻辑独立,通过递归的返回值传递累加结果,符合纯函数的设计思路
内容的提问来源于stack exchange,提问作者yalanday
相关产品推荐
相关产品推荐

