js实现冰雹猜想
冰雹猜想简介
冰雹猜想(Collatz Conjecture)是一个数学猜想:对于任意正整数,按照以下规则运算,最终都会收敛到1。
- 若数字为偶数,则除以2
- 若数字为奇数,则乘以3加1
实现步骤
递归实现
通过递归函数不断处理数字,直到结果为1:
function collatzRecursive(n, sequence = []) {
sequence.push(n);
if (n === 1) return sequence;
return collatzRecursive(n % 2 === 0 ? n / 2 : 3 * n + 1, sequence);
}
console.log(collatzRecursive(6)); // 输出 [6, 3, 10, 5, 16, 8, 4, 2, 1]
循环实现
使用循环代替递归,避免栈溢出风险:
function collatzLoop(n) {
const sequence = [];
while (n !== 1) {
sequence.push(n);
n = n % 2 === 0 ? n / 2 : 3 * n + 1;
}
sequence.push(1);
return sequence;
}
console.log(collatzLoop(7)); // 输出 [7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]
可视化步数
统计达到1所需的步数:
function collatzSteps(n) {
let steps = 0;
while (n !== 1) {
n = n % 2 === 0 ? n / 2 : 3 * n + 1;
steps++;
}
return steps;
}
console.log(collatzSteps(27)); // 输出 111
注意事项
- 输入需为正整数,否则会导致无限循环。
- 大数可能超出JavaScript整数范围,需使用
BigInt处理。 - 冰雹猜想尚未被数学证明,但所有测试数均符合规律。
扩展应用
可结合前端图表库(如Chart.js)绘制序列变化曲线,直观展示收敛过程。







