找到阶乘的数字之和

时间:2014-03-22 22:32:55

标签: ruby algorithm

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)

2 个答案:

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