【问题标题】:How does this method use its own method in ruby?这个方法如何在 ruby​​ 中使用它自己的方法?
【发布时间】:2012-03-13 11:06:02
【问题描述】:

我看到了这个关于斐波那契数列的例子,然后在 IRB 中对其进行了测试。希望有人可以为我分解它并向我展示它如何在正在定义的方法中使用相同的方法。

def fib(n)
 return n if (0..1).include? n
 fib(n-1) + fib(n-2) if n > 1
end

【问题讨论】:

  • 重要的是要注意,在这种情况下,并非每次调用fib 都会导致再次调用fib,这是防止它成为无限循环的原因。太多的调用在一些返回之前堆积起来并产生 Stack Overflow 错误。 ;)

标签: ruby math methods recursion fibonacci


【解决方案1】:

当您使用def whatever(...) 定义方法时,您正在做两件事:创建方法,并将其分配给命名的方法槽。

当您在 Ruby 中调用一个方法时,它会在本地范围内查找该方法;在 fib 方法内,该方法包括定义 fib 的当前对象。因此,它找到fib当前 定义并调用它。

我提到当前部分是因为如果 fib 方法在其自身内部的当前对象上重新定义 fib 将使用新定义,而不是旧定义。

也就是说:每次调用该名称时,都会动态查找与名称关联的代码。

【讨论】:

  • 感谢丹尼尔,这对您有很大帮助!
【解决方案2】:

它被称为递归......它是一种有时会出现在编程中的模式......如果你想编程,它是你应该学习的工具/过程。不要在这里反刍已经存在的内容,只需阅读维基百科上的内容......其中包含对斐波那契数列的解释,这是递归的事实示例。

http://en.wikipedia.org/wiki/Recursion

【讨论】:

  • 老实说,我什至不知道这段代码的 sn-p 被称为递归,这使得研究它的含义有点困难。
猜你喜欢
  • 2020-02-17
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多