我想使用递归生成整数序列。如果输入2
,则o / p应该为[2, 6, 22, 86, 342]
。我想通过使用递归函数来实现这一点。我已经使用迭代完成了以下操作:
n = gets
i = 0
a = Array.new
a.push(n)
while i < 4
n = n * 4 - 2
a.push(n)
i = i + 1
end
p a
应该进行哪些更改?
答案 0 :(得分:3)
这应该为您做到:
def seq(num,limit=5)
return [] if limit < 1
[num] + seq(num*4-2,limit - 1)
end
然后
seq(2,5)
#=> [2, 6, 22, 86, 342]
我将添加某种解释,但我不确定该说些什么。这是您提出的方法的递归版本。
我们也可以像这样使它成为枚举器
enum= ->(num) { Enumerator.new do |y|
loop do
y << num
num = num*4-2
end
end }
seq = enum.(2)
seq.take(7)
#=> [2, 6, 22, 86, 342, 1366, 5462]
enum.(3).take(4)
#=> [3, 10, 38, 150]
本质上不是完全递归的,但这是构建可重用的数字生成器的常见做法。
答案 1 :(得分:-1)
其他选项:
def sequence(n, res=[])
return res if res.size == 5
sequence(n*4-2, res << n)
end