整数的递归序列

时间:2018-12-19 19:06:15

标签: ruby

我想使用递归生成整数序列。如果输入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

应该进行哪些更改?

2 个答案:

答案 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