斐波那契找到第 n 项 Ruby

Fibonacci find the nth term Ruby

我了解斐波那契的工作原理,但我需要解释为什么这段代码使用 fibfib 不使用

def fib(n)
  return 1 if n <= 2
  return fib(n-1) + fib(n-2)
end

上面的代码给出了 fib(n-1) + fib(n-2)

的正确答案

但是为什么下面的代码不起作用?

def fib(n)
  return 1 if n <= 2
  return (n-1) + (n-2)
end

首先,欢迎来到递归达人!

从现在开始,我打赌你总是使用如下函数:

function something()
{
   //do_something
   return (something)
}

称为迭代函数,函数的开始和return 但是斐波那契是介绍递归概念的好例子! 如果你了解斐波那契数列,你就会意识到一个值是由先前的值提供的 n + 1 = n / 2 这是一个套件。 考虑到这一点,一个函数可以称它为 self ,是的,你听到了,

function something()
{
  something();
} 

这段代码将永远调用某些东西,直到您遇到著名的错误“堆栈溢出”(此网站名称来自此错误),但稍后您会明白为什么。

现在关注 fib 会调用它自身 n 次的事实,这取决于你想要的值。

所以通过 return (n-1) + (n-2) 删除 de return fib(n-1) + fib(n-2) 你只执行这个函数“一次”,举这个例子,对于 fib 如果你需要调用 fib 函数 5 次但你只调用 fib 一次,你失败了,这不是你要的。

因此,在同一个函数中调用同一个函数,你可以领略一下什么是递归,看看google,测试一下!