gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:43:51 27 4
gpt4 key购买 nike

我试图取两个值 timesnumber 并返回 number 重复 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

当我单独运行每个测试用例一次时,我通过了所有测试。但是,当我一次运行它们时,它失败了; @array 包含每个测试用例的所有值,并且 @array 在整个测试套件的末尾看起来像这样:

@array # => [5, 5, 5, 1, 1, 1, 1, 2, 2]

这是实现二:

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

这将只返回一个值,因为递归会为每次运行创建一个本地副本。

我怎样才能返回一个能让测试用例通过的数组?我不能使用全局变量或实例变量,也不能使用数组的本地副本。我可以在两者之间使用什么吗?

最佳答案

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

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

如果你想使用累加器,你可以这样做:

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

(请注意,您也可以使用 accum << number,但我个人更喜欢在编写递归函数时将数据结构视为不可变的——因为,好吧,它是一个大写的 F 函数,函数不应该有副作用。 )

关于ruby - 如何在递归方法中返回具有累积值的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38056311/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com