因子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}")
答案 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