【问题标题】:Fibonacci find the nth term Ruby斐波那契找到第 n 项 Ruby
【发布时间】:2021-09-03 11:49:55
【问题描述】:

我了解斐波那契是如何工作的,但我需要解释一下为什么这段代码可以在其中使用 fib 而不是在没有 fib 的情况下使用

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

【问题讨论】:

  • 因为这是一个完全不同的数学公式。为什么会这样?
  • 你能解释一下它有什么不同吗?通过将 fib 放入公式中,以及为什么它不低于
  • 试试fib(3)。如果你不能这样做,那么你就没有编程问题。你有一道数学题。
  • @kbob 您如何手动计算fib(5),即使用笔和纸?

标签: ruby fibonacci


【解决方案1】:

首先,欢迎来到递归人!

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

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

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

function something()
{
  something();
} 

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

现在关注 fib 将调用它 self n 次这一事实,这取决于你想要的值。

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

因此,在同一个函数内部调用同一个函数,你可以尝尝什么是递归,去google看看,测试一下!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-22
    • 2022-12-10
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 2017-01-29
    相关资源
    最近更新 更多