2017-07-28 48 views
0

我試圖做一個方法,從螺旋讀取2d數組返回一個數組。我使用遞歸,然後想要在傳入的參數數組爲空時停止它。奇怪的空?識別行爲

@arr = [] 

def spiral(array) 
    array.to_a.empty? ? true : @arr << array.shift 
    spiral(array.transpose.reverse) 
end 

然而,在遞歸線添加當空方法沒有認識到「[]」爲空了和拋出「堆棧級別太深」錯誤,我假定是一個無限循環,因爲它具有沒有停止標準?

+0

'array.to_a.empty? ?返回:@arr << array.shift' – frozen

回答

2

爲了停止遞歸,當達到所需條件(或者至少不會再次調用自己)時,您的函數需要返回。在你的代碼中,該函數只生成true,但繼續執行,最後調用它自己。

嘗試是這樣的:

@arr = [] 

def spiral(array) 
    return @arr.flatten if array.to_a.empty? 
    @arr << array.shift 
    spiral(array.transpose.reverse) 
end 
+0

非常感謝,非常快!是的,我現在明白了。在這種情況下,我想返回@ arr.flatten。 – pyan