在我的情況下,它的工作很好,但一個壞的結果,問題是使用:的
arr = arr[0...-1]
代替
arr.pop
與流行修改編曲做小輸出最後一個數字並返回最後一個數字,另一個在得到最後一個數字之前得到的數組更小:
分別
def add_numbers(arr)
puts "array = #{arr}"
puts "length = #{arr.length}"
return arr.first if arr.size == 1
return nil if arr.empty?
arr.pop + add_numbers(arr[0..-1])
end
def add_numbers(arr)
puts "array = #{arr}"
puts "length = #{arr.length}"
return arr.first if arr.size == 1
return nil if arr.empty?
arr = arr[0...-1]
arr.last + add_numbers(arr[0..-1])
end
與下面的輸出:
[32] pry(main)> a = [1,2,3,4,5]
=> [1, 2, 3, 4, 5]
[33] pry(main)> a.pop
=> 5
[34] pry(main)> a
=> [1, 2, 3, 4]
[35] pry(main)> a = [1,2,3,4,5]
=> [1, 2, 3, 4, 5]
[36] pry(main)> a = a[0...-1]
=> [1, 2, 3, 4]
[37] pry(main)> a.last
=> 4
讓一些調試器添加到您的功能
[1] pry(main)>
[1] pry(main)* => :add_numbers
[2] pry(main)> add_numbers [1, 2, 3, 4, 5]
array = [1, 2, 3, 4, 5]
length = 5
array = [1, 2, 3, 4]
length = 4
array = [1, 2, 3]
length = 3
array = [1, 2]
length = 2
array = [1]
length = 1
=> 15
[11] pry(main)>
[11] pry(main)* => :add_numbers
[12] pry(main)> add_numbers [1, 2, 3, 4, 5]
array = [1, 2, 3, 4, 5]
length = 5
array = [1, 2, 3, 4]
length = 4
array = [1, 2, 3]
length = 3
array = [1, 2]
length = 2
array = [1]
length = 1
=> 11
所以你應該最後一個功能更改爲類似這樣:
def add_numbers(arr)
puts "array = #{arr}"
puts "length = #{arr.length}"
return arr.first if arr.size == 1
return nil if arr.empty?
arr.last + add_numbers(arr[0...-1])
end
以下輸出
[39] pry(main)> add_numbers [1, 2, 3, 4, 5]
array = [1, 2, 3, 4, 5]
length = 5
array = [1, 2, 3, 4]
length = 4
array = [1, 2, 3]
length = 3
array = [1, 2]
length = 2
array = [1]
length = 1
=> 15