javascript - 简单的函数返回我在 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));
解决方案
这张图表展示了代码在做什么以及从根本上说斐波那契数是什么。
该图表的工作原理如下:
- 图表从 开始
fib(6)
。 - 由于
fib(x) = fib(x - 1) + fib(x - 2)
,然后fib(6) = fib(5) + fib(4)
如图所示,通过向下移动的箭头。 - 您现在有两个值要包含在最终答案中
fib(5)
,并且fib(4)
. 该图表显示了如何为它们重复上述过程(将它们分成较小的部分)。 - 重复步骤 1-3 直到到达
fib(2)
or ,根据定义fib(1)
,它自动等于1
。 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));
推荐阅读
- tcp - 将 BCD 发送到主机而不是 ascii
- mysql - Veridata ORACLEDB 中用于比较的对象
- mysql - 如何在具有多个条件的 mysql 或 php 上连接两个表
- javascript - 如何使用 css 模块动态访问 bem 样式选择器?
- c++ - 特征静态矩阵初始化
- javascript - 从列中添加值的表达式
- rust - 单元测试actix actor,向不同类型的actor发送消息
- salt-stack - 如何将列表设置为盐粒的值?
- cordova - Cordova 视频播放器,如何读取本地文件?
- jmeter - 并发线程组中“dynamictg.propertiescaching_validity”的不同部分有什么用?