(Ruby)First x Recursive Nums

时间:2017-03-30 05:38:06

标签: ruby recursion factorial

我想写一个返回第一个num递归数字的递归方法。

到目前为止,这是我的代码:

def recursive_factorials(num)
  return [1] if num == 1
  arr = recursive_factorials(num-1)
  arr << num * arr.last
end

不确定我做错了什么。 num = 6的预期结果为[1, 1, 2, 6, 24, 120],我得到[1, 2, 6, 24, 120, 720],所以我可能会接近但实际上不知道。

任何帮助将不胜感激。另外,如果我没有正确使用递归,请让我出去。

3 个答案:

答案 0 :(得分:2)

以下是一个例子:

{{1}}

答案 1 :(得分:2)

问题是关于递归,但你也可以使用迭代,它更快:

def factorials(num)
  m = 1
  (0...num).map {|e| e.zero? ? 1 : m *= e }
end
factorials(6)
=> [1, 1, 2, 6, 24, 120]

或者通过使用哈希记忆(我会说它也是递归):

factorials = Hash.new { |h, k| h[k] = h[k-1] * k }.update(0 => 1)
factorials.values_at(*(0..5))
=> [1, 1, 2, 6, 24, 120]

答案 2 :(得分:1)

Ilya's answer的变体:

def each_factorial
  return enum_for(__method__) unless block_given?
  m = 1
  1.step do |i|
    yield m
    m *= i
  end
end

each_factorial.take(6)
#=> [1, 1, 2, 6, 24, 120]