我看到關於fibonacci序列的這個例子,然後在IRB中測試它。希望有人能爲我分解它,並告訴我它是如何在正在定義的方法內使用相同的方法。這個方法在ruby中如何使用自己的方法?
def fib(n)
return n if (0..1).include? n
fib(n-1) + fib(n-2) if n > 1
end
我看到關於fibonacci序列的這個例子,然後在IRB中測試它。希望有人能爲我分解它,並告訴我它是如何在正在定義的方法內使用相同的方法。這個方法在ruby中如何使用自己的方法?
def fib(n)
return n if (0..1).include? n
fib(n-1) + fib(n-2) if n > 1
end
當你定義一個方法與def whatever(...)
你正在做兩件事情:創建一個方法,並將其分配給指定的方法插槽。
當你在Ruby中調用一個方法時,它會在本地範圍內查找;包含定義fib
的當前對象的fib
方法中。因此,它找到當前的定義fib
並調用它。
我提到當前部分,因爲如果fib
方法在其內部的當前對象上重新定義fib
,將使用新定義,而不是舊定義。
也就是說:每次調用名稱時,它都會動態地找到與名稱相關的代碼。
謝謝丹尼爾,這有助於一噸! – ericraio 2012-02-23 02:43:21
它被稱爲遞歸...它是一個在編程時有時出現的模式...如果你想編程它是一個你應該學習的工具/過程。與其在這裏迴流的東西已經在那裏,只是讀維基百科上的內容......其中包含斐波那契序列的解釋,這是遞歸的事實例子。
老實說,我甚至不知道這段代碼被稱爲遞歸,這使得研究它的含義很難。 – ericraio 2012-02-23 02:42:51
重要的是要注意,在這種情況下是非常重要的,而不是'fib'每次調用會導致另一個調用'fib',這是成爲一個無限循環,保持它。在返回之前有太多的調用堆積起來併產生** Stack Overflow **錯誤。 ;) – coreyward 2012-02-23 02:42:22