You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现数组最近Fibonacci数计算以得到预期输出2

代码修改实现方案

需求对齐

传入数组[15, 1, 3]时,首先计算数组有效元素总和为19,再找到距离19最近的斐波那契数(该值为21),最终输出两者的绝对差值2。

原有代码问题

  • 原代码逻辑为统计数组内本身是斐波那契数的元素个数,和当前需求完全不匹配
  • 原驱动代码中数组写法存在多余逗号,生成了空元素[15, 1, ,3],遍历过程会出现undefined值,需要修正语法错误

修改后完整代码

// 原有判断完全平方数的工具函数可直接复用
function isPerfectSquare(num) {
    let n = parseInt(Math.sqrt(num));
    return n * n === num;
}

// 复用原有逻辑封装斐波那契数判断方法
function isFibonacci(num) {
    return isPerfectSquare(5 * num * num + 4) || isPerfectSquare(5 * num * num - 4);
}

// 核心业务逻辑
function calcNearestFibDifference(arr) {
    // 过滤数组空值、非数字无效值,计算元素总和
    const validNums = arr.filter(item => typeof item === 'number' && !isNaN(item));
    const total = validNums.reduce((sum, cur) => sum + cur, 0);

    // 总和本身是斐波那契数时直接返回差值0
    if (isFibonacci(total)) return 0;

    // 向下查找小于总和的最大斐波那契数
    let lowerFib = total - 1;
    while (lowerFib > 0 && !isFibonacci(lowerFib)) {
        lowerFib--;
    }

    // 向上查找大于总和的最小斐波那契数
    let higherFib = total + 1;
    while (!isFibonacci(higherFib)) {
        higherFib++;
    }

    // 返回两个方向中更小的差值
    return Math.min(total - lowerFib, higherFib - total);
}

// 测试用例
const inputArray = [15, 1, 3];
const output = calcNearestFibDifference(inputArray);
console.log(output); // 运行输出2,符合预期

关键修改点说明

  • 修正原数组的语法错误,移除多余逗号避免空元素
  • 保留原有成熟的斐波那契数判断逻辑,减少重复代码
  • 新增数组有效值过滤、求和逻辑,适配数组输入场景
  • 新增双向查找逻辑,分别定位总和上下两侧最近的斐波那契数,取最小差值返回
  • 测试场景中总和19的下侧最近斐波那契数为13(差值6),上侧最近斐波那契数为21(差值2),最终返回结果2,和需求一致

内容的提问来源于stack exchange,提问作者iyans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 07:21:20