在我的情况下,它的工作很好,但一个坏的结果,问题是使用:的
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