我在纸上考试中有这个简单的功能。我的回答是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));
答案 0 :(得分:2)
此图表说明了代码的功能以及基本的斐波那契数字。
以下是该图表的工作方式:
fib(6)
开始。fib(x) = fib(x - 1) + fib(x - 2)
开始,然后fib(6) = fib(5) + fib(4)
如图所示,通过向下移动的箭头显示。fib(5)
和fib(4)
中。图表显示了如何为他们重复上述过程(将它们分成较小的部分)。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));
答案 1 :(得分:1)
该程序是著名的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);
}
这不是解决此问题的有效方法,因为它具有重叠子问题。您可以尝试通过记忆来解决!