1)我想我理解這第一個,因爲我注意到遞歸按從n到n-1的順序進行,並退出它所處的當前級別,直到它達到0並存在。我包含了一些put語句,用於映射並遵循遞歸。理解一個簡單遞歸邏輯的問題(Ruby)
def array_push(answer, n) #1. array push (RECURSIVE)
puts "B n: #{n} inception map"; return answer if n <= 0;
puts ". n: #{n} inception map"; answer << n;
puts "A n: #{n} inception map"; return array_push(answer, n-1)
end
puts array_push([], 4)
2)但是當它在相反的方向,這就是我迷路了......我很困惑,爲什麼函數不返回在它擊中的瞬間假「返回false如果n < = 0「語句。根據我的理解,我的「B」和「。」 puts語句首先被評估,而我的「A」puts語句在「返回false語句」之後被評估。
def reverse_push(answer, n) #2. reverse push (RECURSIVE)
puts "B n: #{n} inception map"; return false if n <= 0 ## <== right here ##
puts ". n: #{n} inception map"; reverse_push(answer, n-1)
p answer
puts "A n: #{n} inception map"; return answer << n
end
puts reverse_push([], 4)
它看起來像第一個返回[4,3,2,1]和第二個副作用傳遞的數組,將1,2,3,4添加到它並返回false。那不是會發生什麼?發生反轉是因爲第二個函數在遞歸的途中改變了數組。 – danh
感謝您的回覆。我覺得奇怪的是虛假陳述沒有出現在我的控制檯上。如果n <= 0並且整個函數看起來仍然以相同的方式工作,我可以取出false並將其作爲返回值。 – user3015876
哦,是的,這是有道理的。我預測你是怎麼做的,但這是錯誤的。將在一個答案中解釋。 – danh