JS入门求助:修正checkStr函数逻辑并实现条件递归调用
修正后的checkStr函数实现
原代码存在几个关键问题,导致递归逻辑失效:
- 使用全局变量
res存储匹配字符,递归时会累计之前的结果,无法正确统计新输入字符的出现次数 - 循环变量
i未声明,会成为全局变量,干扰递归中的循环执行 - 递归调用时没有重新初始化统计状态,导致判断逻辑混乱
以下是修正后的代码:
const str = 'sssxxa'; function checkStr(targetStr, char) { // 每次调用重新统计当前字符的出现次数,避免全局变量污染 let count = 0; // 声明循环变量i,避免全局作用域污染 for (let i = 0; i < targetStr.length; i++) { if (targetStr[i] === char) { count++; } } if (count >= 2) { alert(`重复总数:${count}`); } else { alert('未找到足够重复的字符'); // 递归调用,传入新输入的字符 checkStr(targetStr, prompt('请重新输入要查找的字符:')); } } // 初始调用 checkStr(str, prompt('请输入要查找的字符:'));
关键修改说明
- 移除全局变量
res和count,改为在函数内部声明count,每次调用函数都会重新初始化,确保统计的是当前输入字符的出现次数 - 循环变量
i用let声明,限定在循环作用域内,避免递归时的变量冲突 - 优化判断逻辑,直接用
count统计次数,比拼接字符串更高效直观 - 递归调用时明确提示用户输入,提升交互体验
内容的提问来源于stack exchange,提问作者denims
相关产品推荐
相关产品推荐

