js实现报数
报数游戏实现
报数游戏通常指轮流报数,遇到特定数字(如3的倍数)时跳过。以下是JavaScript实现方案:
基础实现
function countOff(maxNumber, skipMultiple) {
const result = [];
for (let i = 1; i <= maxNumber; i++) {
if (i % skipMultiple === 0 || String(i).includes(skipMultiple)) {
result.push("拍手");
} else {
result.push(i);
}
}
return result;
}
console.log(countOff(10, 3)); // 输出: [1, 2, "拍手", 4, 5, "拍手", 7, 8, "拍手", 10]
扩展功能版本
class CountingGame {
constructor(rules = {multiple: 3, contains: true}) {
this.rules = rules;
}
generateSequence(n) {
return Array.from({length: n}, (_, i) => this._checkNumber(i + 1));
}
_checkNumber(num) {
const {multiple, contains} = this.rules;
const shouldSkip =
(multiple && num % multiple === 0) ||
(contains && String(num).includes(multiple));
return shouldSkip ? "跳过" : num;
}
}
// 使用示例
const game = new CountingGame();
console.log(game.generateSequence(15));
递归实现方案
function recursiveCount(current, max, skip, acc = []) {
if (current > max) return acc;
const replacement =
current % skip === 0 || `${current}`.includes(skip) ? "拍桌" : current;
return recursiveCount(current + 1, max, skip, [...acc, replacement]);
}
实现要点
- 使用取模运算符
%检测倍数关系 - 通过
String.includes()检测数字包含 - 可扩展为支持多种规则(倍数、包含数字、自定义替换词)
- 注意边界条件处理(如0或负数输入)
典型应用场景

- 儿童数学游戏开发
- 面试逻辑题实现
- 团队破冰活动工具
- 数字敏感度训练程序
以上实现可根据实际需求调整规则,如修改跳过的数字条件或替换动作。对于大规模数字处理,建议使用迭代而非递归方式以避免调用栈溢出。






