如何将基于while循环的JavaScript猜数程序改写为递归实现?
递归实现随机数字查找
原代码通过while循环重复生成随机数直到匹配目标值,要改成递归版本,核心是把循环的状态(尝试次数)通过参数传递,同时明确递归的终止条件。
递归实现代码
const recursiveFind = (num, attempts = 1) => { const randomNumber = Math.round(Math.random() * 100000); if (randomNumber === num) { console.log(`It took ${attempts} attempts`); return; } recursiveFind(num, attempts + 1); };
代码说明
- 参数设计:
attempts设为可选参数,默认值1,对应原代码中第一次生成随机数就算一次尝试的逻辑。 - 终止条件:当生成的随机数等于目标数字
num时,打印尝试次数并返回,结束递归调用链。 - 递归逻辑:如果未匹配目标值,就递归调用自身,并将尝试次数加1传递下去,相当于
while循环的一次迭代。
调用示例
和原函数用法一致:
recursiveFind(50000); // 查找数字50000,输出尝试次数
这个实现完全复刻了原代码的逻辑,只是把循环结构换成了递归结构,核心是利用参数传递来维护尝试次数的状态,避免了原循环中在同一作用域累加变量的方式。
内容的提问来源于stack exchange,提问作者netrolite
相关产品推荐
相关产品推荐

