factorial_sum(5)应该返回3.我得到的错误是" inject是一种未定义的方法"。我也想知道是否可以将这两个功能结合起来。因为我刚开始递归,我不确定。谢谢!
def factorial_sum(x)
factorial = factorial(x)
factorial.to_s.split('').collect { |i| i.to_i }
sum = factorial.inject { |sum, n| sum + n }
end
def factorial(x)
if x < 0
return "Negative numbers don't have a factorial"
elsif x == 0
1
else
factorial = x * factorial(x - 1)
end
end
puts factorial_sum(5)
答案 0 :(得分:5)
factorial.to_s.split('').collect { |i| i.to_i }
此行是无操作。您构建一个列表然后将其丢弃。你可能意味着factorial = ...
我不得不说,通过一些努力和一些印刷声明,这很容易找到......
顺便说一句,这里有一个更简洁的方式:
(1..x).reduce(:*).to_s.chars.map(&:to_i).reduce(:+)
答案 1 :(得分:2)
直接将其暂时转换为字符串,无递归。
s, q = 0, 120
while q > 0
q, r = q.divmod(10)
s += r
end
s # => 3