我想写一个返回第一个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]
,所以我可能会接近但实际上不知道。
任何帮助将不胜感激。另外,如果我没有正确使用递归,请让我出去。
答案 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]