无法使用阶乘函数

时间:2014-10-23 21:59:22

标签: ruby factorial

因子1和2有效,但3和4没有。我已经在纸上完成了这些步骤,并且不明白为什么它们不起作用。任何帮助深表感谢。

def factorial(n)
  x = 1
  y = n

  while x < n
    n = n * (y-x)
    x = x + 1
  end
  return n
end

puts("factorial(1) == 1: #{factorial(1) == 1}")
puts("factorial(2) == 2: #{factorial(2) == 2}")
puts("factorial(3) == 6: #{factorial(3) == 6}")
puts("factorial(4) == 24: #{factorial(4) == 24}")

2 个答案:

答案 0 :(得分:1)

试试这个:

   def factorial(n)
      if n < 0
        return nil
      end

      x = 1
      while n > 0
        x = x * n

        n -= 1
      end

      return x
    end

答案 1 :(得分:1)

它不起作用的原因是每次循环后n的值变大,条件x < n一直执行,直到它到达n变为零的点为止。如果你将3传递给第三个循环的函数,你将得到:

while x(3) < n(6)
  n(6) = n(6) * (y(3) - x(3))
end

因此n变为0,导致循环在下一轮退出,返回值显然为0.要解决此问题,您只需将n替换为y { {1}}条件:

while

作为旁注,另一种有趣的方法是使用递归来解决阶乘问题:

while x < y