Javascript 有人能解释这段代码是如何工作的吗? 函数f(num){ if(num

Javascript 有人能解释这段代码是如何工作的吗? 函数f(num){ if(num,javascript,recursion,Javascript,Recursion,这是一个计算第num个Fibonacci数(1 1 2 3 5 8…)的简单递归实现。它有一个小错误。它应该是: function f(num) { if (num<1) { return 1; } return f(num-1) + f(num-2); } f(5); // 13 我打赌你现在看到了这些模式。希望能有所帮助。这是递归。这是斐波那契级数。慢慢来 从一个简单的例子开始: f(0)=1(因为num基本上有直接和间接两种递归形式。然而,

这是一个计算第num个Fibonacci数(1 1 2 3 5 8…)的简单递归实现。它有一个小错误。它应该是:

function f(num) {
    if (num<1) {
        return 1;
    }
    return f(num-1) + f(num-2);
}

f(5); // 13

我打赌你现在看到了这些模式。希望能有所帮助。

这是递归。这是斐波那契级数。慢慢来

从一个简单的例子开始:


f(0)=1(因为num基本上有直接和间接两种递归形式。然而,在这两种情况下,任何适当的递归形式都必须遵守三条规则,这三条规则使其递归

1.)递归算法必须有基本情况

2.)递归算法必须改变其状态并向基本情况移动

3.)递归算法必须递归地调用自身

使用递归算法的目的在于将相对较大的问题分解为较小的问题,这些问题可以迭代求解,或者直到“基本情况”条件被证明为真

f(0) -> 0 is less than 1, return 1, thus f(0) = 1
f(1) -> 1 is less than or equal to 1, return 1, thus f(1) = 1
f(2) -> 2 is greater than 1, return f(1) + f(0), which we know from above, is 1 + 1, thus f(2) = 2
f(3) -> 3 is greater than 1, return f(2) + f(1), 2 + 1, thus f(3) = 3
f(4) -> 4 is greater than 1, return f(3) + f(2), 3 + 2, thus f(4) = 5
函数f(num){

如果(numGoogle fibonacci这是一个基本的fibonacci系列程序。与其弄清楚程序是如何工作的,不如弄清楚生成fibonacci系列的逻辑。没问题,很高兴它很有用。如果你觉得有用,如果你把它记下来作为答案,我将不胜感激。谢谢你提出了一个愚蠢的问题,但我真的很想问知道函数的用途。
f(5)
返回8,感谢我的问题的所有答案,我可以理解它为什么和如何工作。但是,8和5代表什么?有什么联系?8不是斐波那契序列中的第五个元素,也不是前面5项的总和,5不是数组中8的索引(即使有一个数组)。我希望你理解我的问题。我的意思是,如果我想知道序列中的第5个数字或类似的smth,那会有一些用途。不,它没有:上面markL的答案有一个更正,它给出了不同的(对fibonacci正确的)答案,因为基本情况是一步之遥(由于斐波那契数列,每个数都是前两个数的和。f(5)返回该数列中的第五个数(或至少应该)上面TheoNeUpKID的答案是研究这个问题的一个很好的资源。我也推荐这些资源!好吧,我也认为我们应该在序列中得到第5个数字,但是,序列应该是0 1 1 2 3 5 8;8不是第5个元素
f(0) -> 0 is less than 1, return 1, thus f(0) = 1
f(1) -> 1 is less than or equal to 1, return 1, thus f(1) = 1
f(2) -> 2 is greater than 1, return f(1) + f(0), which we know from above, is 1 + 1, thus f(2) = 2
f(3) -> 3 is greater than 1, return f(2) + f(1), 2 + 1, thus f(3) = 3
f(4) -> 4 is greater than 1, return f(3) + f(2), 3 + 2, thus f(4) = 5
function f(num) {
    if (num<=1) { // (1) Base case condition 
        return 1; // (2.b) moving forward once the base case is true
    }
     // (3) the function calling itself
    // also (2.a) changed state - (i.e., the param value is being decremented or "unwound" with each pass of recursion (i.e., method call)
    return f(num-1) + f(num-2); 
}
f(5); // Fn = Fn-1 + Fn-2 (Fibonacci Number Series)