JavaScript 中我没想到的简单函数返回数字
Simple function returning number that I didn't expect in 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)
或 fib(1)
,根据定义自动等于 1
。
- 最后,将图表底部的所有
1
求和(共有 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));
这个节目是著名的Fibonacci节目。也就是说,前两个数字之后的每个数字都是前两个数字的总和。如:
1 1 2 3 5 8 13.....
如你所见,第六个数字是8。
现在我们正在讨论如何解决这个问题。首先,你应该知道递归关系是:
F(i) = F(i - 1) + F(i - 2)
F(1) = 1, F(2) = 1.
所以代码应该是:
function fib(num1) {
if (num1 <= 2) return 1;
return fib(num1 - 1) + fib(num1 - 2);
}
这不是解决这个问题的有效方法,因为它有重叠子问题。你可以尝试背诵来解决!
这个简单的功能我在纸上试过。我的答案是 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)
或fib(1)
,根据定义自动等于1
。 - 最后,将图表底部的所有
1
求和(共有 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));
这个节目是著名的Fibonacci节目。也就是说,前两个数字之后的每个数字都是前两个数字的总和。如:
1 1 2 3 5 8 13.....
如你所见,第六个数字是8。
现在我们正在讨论如何解决这个问题。首先,你应该知道递归关系是:
F(i) = F(i - 1) + F(i - 2)
F(1) = 1, F(2) = 1.
所以代码应该是:
function fib(num1) {
if (num1 <= 2) return 1;
return fib(num1 - 1) + fib(num1 - 2);
}
这不是解决这个问题的有效方法,因为它有重叠子问题。你可以尝试背诵来解决!