-2
def append(arr, n)
return arr if n < 0
puts "n1: #{n}, #{arr}"
append(arr, n-1)
puts "n2: #{n}, #{arr}"
arr << n
puts "n3: #{n}, #{arr}"
arr
end
append([],4) #=> [0, 1, 2, 3, 4]
私はこの再帰的方法を理解できないようです。 0からnまでの配列を生成します。ルビの再帰的メソッド
arrとnがどのように動作しているかを確認するために、いくつか追加しました。
n1: 4, []
n1: 3, []
n1: 2, []
n1: 1, []
n1: 0, []
n2: 0, []
n3: 0, [0]
n2: 1, [0]
n3: 1, [0, 1]
n2: 2, [0, 1]
n3: 2, [0, 1, 2]
n2: 3, [0, 1, 2]
n3: 3, [0, 1, 2, 3]
n2: 4, [0, 1, 2, 3]
n3: 4, [0, 1, 2, 3, 4]
nが-1までカウントダウンする方法を理解してから、arrが返されます。私が混乱しているのは、カウントアップが起こる場所です。 append(arr, -1)
が呼び出されると、arrが返され、ループが停止し、私が得るのは[]です。なぜ、メソッドが返された後に実行し続けるのですか?カウントアップはどこで行われますか?
'reverse_append'何ですか? – emlai
申し訳ありませんが、タイプミス。それを私が直した。 – davidhu2000