我看到了关于斐波纳契序列的这个例子,然后在IRB中进行了测试。希望有人可以为我分解它并告诉我它是如何在定义的方法中使用相同的方法。
def fib(n)
return n if (0..1).include? n
fib(n-1) + fib(n-2) if n > 1
end
答案 0 :(得分:6)
使用def whatever(...)
定义方法时,您要做两件事:创建方法,并将其分配给指定的方法槽。
当你在Ruby中调用一个方法时,它将在本地范围内查找;在fib
方法内部,其中包含定义fib
的当前对象。因此,它找到fib
的当前定义并调用它。
我提到了当前部分,因为如果fib
方法在其自身内部的当前对象上重新定义fib
,则将使用新定义,而不是旧定义。
也就是说:每次调用名称时,它都会动态地找到与 name 相关联的代码。
答案 1 :(得分:3)
它被称为递归...这是一种有时出现在编程中的模式......如果你想编程它是一个你应该学习的工具/过程。而不是在这里反复出现那里已经存在的东西,只需阅读维基百科上的内容......其中包含斐波纳契序列的解释,这是递归的事实。