2012-02-23 113 views
2

我看到關於fibonacci序列的這個例子,然後在IRB中測試它。希望有人能爲我分解它,並告訴我它是如何在正在定義的方法內使用相同的方法。這個方法在ruby中如何使用自己的方法?

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

重要的是要注意,在這種情況下是非常重要的,而不是'fib'每次調用會導致另一個調用'fib',這是成爲一個無限循環,保持它。在返回之前有太多的調用堆積起來併產生** Stack Overflow **錯誤。 ;) – coreyward 2012-02-23 02:42:22

回答

6

當你定義一個方法與def whatever(...)你正在做兩件事情:創建一個方法,並將其分配給指定的方法插槽。

當你在Ruby中調用一個方法時,它會在本地範圍內查找;包含定義fib的當前對象的fib方法中。因此,它找到當前的定義fib並調用它。

我提到當前部分,因爲如果fib方法在其內部的當前對象上重新定義fib,將使用新定義,而不是舊定義。

也就是說:每次調用名稱時,它都會動態地找到與名稱相關的代碼。

+0

謝謝丹尼爾,這有助於一噸! – ericraio 2012-02-23 02:43:21

3

它被稱爲遞歸...它是一個在編程時有時出現的模式...如果你想編程它是一個你應該學習的工具/過程。與其在這裏迴流的東西已經在那裏,只是讀維基百科上的內容......其中包含斐波那契序列的解釋,這是遞歸的事實例子。

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

+1

老實說,我甚至不知道這段代碼被稱爲遞歸,這使得研究它的含義很難。 – ericraio 2012-02-23 02:42:51