gpt4 book ai didi

ruby - 数组上的递归调用映射?

转载 作者:太空宇宙 更新时间:2023-11-03 16:28:53 24 4
gpt4 key购买 nike

我正在尝试编写一个方法,该方法采用值 N 并返回三个整数 N/2N/3N/4 四舍五入。它不断收回它们,直到只有零。

def crazy_coins(n)
coins = Array.new
coins.push(n.to_a)
generate = Proc.new { |x|
temp = []
count = 2
while count < 5
x = n/count
temp << x
count += 1
end
return temp
}
coins.map!(&generate)
end

输出:

crazy_coins(5)
# => [[2, 1, 1]]

成功的输出应该类似于:

crazy_coins(5)

11
=> [2, 1, 1]
=> [[1, 0, 0], [0, 0, 0], [0, 0, 0]]
=> [[[0, 0, 0], 0, 0], [0, 0, 0], [0, 0, 0]]

对每个元素再次调用 coins.map! 直到所有 coins[i][j] == 0 的最佳方式是什么(可能是递归的)?

我尝试调用 coins[0].map!(&generate) 但结果是 [[2, 1, 1], [2, 1, 1], [2, 1, 1]]为什么不用新数组替换现有值?

最佳答案

您只需要在每个生成的元素不为 0 时对其进行递归。另外,当集合组合可用时尽量避免迭代。

def divisors(n)
(2..4).map { |d| n/d }
end

def crazy_coins(a)
Array(a).map { |e| e != 0 ? crazy_coins(divisors(e)) : e }
end

crazy_coins(5)
=> [[[[0, 0, 0], 0, 0], [0, 0, 0], [0, 0, 0]]]
crazy_coins(11)
=> [[[[[0, 0, 0], 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], 0], [[0, 0, 0], 0, 0]]]

关于ruby - 数组上的递归调用映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19537458/

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