带函数名和不带函数名返回计算的区别

Difference between returning calculation with function name and without

下面的函数计算斐波那契,为什么最后一个计算需要包括函数名称而不仅仅是 (n-1)+(n-2)

function fibonacci(n){
    if (n===1){ return 1}
    else if (n===0){ return 0} 
    else return fibonacci(n-1)+fibonacci(n-2) // (n-1)+(n-2) does not work. Why?
}

我知道这是一个初学者问题,但找不到答案。如有任何意见,我将不胜感激。 我知道我需要使用递归,但这不是我的问题。

这是递归的解决方案:

function fibonacci(n){
    if (n===1){ return 1}
    else if (n===0){ return 0} 
    else return fibonacci(n-1)+fibonacci(n-2) 
}

您正在为 nth 斐波那契调用此函数。但是您还不知道 nth 斐波那契数列。所以你必须找到 (n-1)(n-2) 斐波纳契。这就是为什么你必须调用 fibonacci(n-1)+fibonacci(n-2)。 而且您甚至不知道第 n-1th 和 n-2th fibonacci,这就是为什么您必须调用它直到知道 fibonacci。你知道 firstsecond 斐波那契。那就是当 n == 1 或 n==0 你 return 只需回答。

例如:

n = 7

fibonacci(7) = fibonacci(6) + fibonacci(5)
fibonacci(6) = fibonacci(5) + fibonacci(4)
fibonacci(5) = fibonacci(4) + fibonacci(3)
fibonacci(4) = fibonacci(3) + fibonacci(2)
fibonacci(3) = fibonacci(2) + fibonacci(1)
fibonacci(2) = fibonacci(1) + fibonacci(0)
fibonacci(1) = 1
fibonacci(0) = 0