首页 > 解决方案 > 简单的函数返回我在 JavaScript 中没想到的数字

问题描述

我在纸上的测试中有这个简单的功能。我的回答是9,当我回家console.log(fib(6))比赛时,我的结果是8. 为什么?

我也问过我的教授,他给了我这张图表,我还是不明白。有什么帮助吗?

斐波那契图表

function fib(num1) {
  if (num1 <= 2) {
    return num1 = 1;
  } else {
    return fib(num1 - 1) + fib(num1 - 2);
  }
}

console.log(fib(6));

标签: javascriptfunctionrecursionfibonacci

解决方案


图表

这张图表展示了代码在做什么以及从根本上说斐波那契数是什么。

该图表的工作原理如下:

  1. 图表从 开始fib(6)
  2. 由于fib(x) = fib(x - 1) + fib(x - 2),然后fib(6) = fib(5) + fib(4)如图所示,通过向下移动的箭头。
  3. 您现在有两个值要包含在最终答案中fib(5),并且fib(4). 该图表显示了如何为它们重复上述过程(将它们分成较小的部分)。
  4. 重复步骤 1-3 直到到达fib(2)or ,根据定义fib(1),它自动等于1
  5. 1最后,将图表底部的所有 s 相加(共有 8 个)。

这与您的代码一起出现:

function fib(num1) {
  // Start with a number (Step 1 on the chart).
  if (num1 <= 2) {
    // If it is <= 2, return 1 (Step 4 on the chart)
    return num1 = 1;
  } else {
    // Break it down into smaller parts (Step 2 on the chart) 
    // and recursively repeat the process for the new parts (Step 3 on the chart).
    return fib(num1 - 1) + fib(num1 - 2);
  }
}

console.log(fib(6));


推荐阅读