Ruby 如何在递归方法中返回具有累积值的数组

Ruby 如何在递归方法中返回具有累积值的数组,ruby,recursion,Ruby,Recursion,我试图获取两个值times和number,并返回一个numberrepeatedtimes的数组。以下是一个例子: replicate(3, 5) # => [5, 5, 5] 以下是我的尝试1: @array = [] def replicate(times, number) return [] if times <= 0 @array << number replicate(times - 1, number) @array end 以下是实施

我试图获取两个值
times
number
,并返回一个
number
repeated
times
的数组。以下是一个例子:

replicate(3, 5) # => [5, 5, 5]
以下是我的尝试1:

@array = []

def replicate(times, number)
  return [] if times <= 0
  @array << number 
  replicate(times - 1, number)
  @array
end
以下是实施方案二:

def replicate(times, number)
  return [] if times <= 0
  array = []
  array << number 
  replicate(times - 1, number)
  array
end
def复制(次数、数量)

如果times将累加器数组传递给递归调用,则返回[]:

def replicate(times, number, array=[])
   return [] if times <= 0
   array << number
   replicate(times - 1, number, array)
   array
end

replicate(3, 5)
=> [5, 5, 5]
def replicate(次数、数量、数组=[])

return[]if times在这种情况下,不需要将累加器保留为实例变量或参数。您只需将此调用的结果(将是一个包含单个元素的数组,即
[number]
)与后续调用的结果连接起来:

def replicate(times, number)
  return [] if times <= 0
  [ number ] + replicate(times - 1, number)
end
def复制(次数、数量)
返回[]如果次数为什么不简单地执行以下操作:

[number]*times
例如:

$ irb
2.3.0 :001 > [1]*5
 => [1, 1, 1, 1, 1] 

尝试将数组传递到递归函数定义中。这是一种常见的模式。这有个名字吗?累加递归是一种叫它的方法。这是一个更好的答案。谢谢,@NicNilov。你的解决方案也很好。对不起,有人否决了它(
[number]*times
$ irb
2.3.0 :001 > [1]*5
 => [1, 1, 1, 1, 1]