当前位置:首页 > JavaScript

js实现冰雹猜想

2026-03-01 12:51:41JavaScript

冰雹猜想简介

冰雹猜想(Collatz Conjecture)是一个数学猜想:对于任意正整数,按照以下规则运算,最终都会收敛到1。

js实现冰雹猜想

  • 若数字为偶数,则除以2
  • 若数字为奇数,则乘以3加1

实现步骤

递归实现

通过递归函数不断处理数字,直到结果为1:

js实现冰雹猜想

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)绘制序列变化曲线,直观展示收敛过程。

标签: 冰雹js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…