Ruby因子函数解释?

时间:2015-02-20 22:09:44

标签: ruby factorial

#This function should return n!
def factorial(n)
  return nil if n < 0
  n == 0 ? 1 : n*factorial(n-1)
end

刚开始,这个功能让我大吃一惊,我会像这样编写这个函数:

def factorial(n)
  result = 1

  if n == 0 
    return 1
  end

  while n > 0
    result *= n
    n -= 1
  end
  return result
end

我简要介绍了if / else语句的简短说明。我不明白的是在函数本身内使用n * factorial(n-1)。

看起来阶乘函数是在阶乘函数中调用的,但那不是正确的吗?

1 个答案:

答案 0 :(得分:2)

因子(5)评估为

5 * factorial(4)

factorial(4)评估为

4 * factorial(3)

factorial(3)评估为

3 * factorial(2)

factorial(2)评估为

2 * factorial(1)

factorial(1)的计算结果为1,因为1 <= 1

适当地替换值会导致

5 * factorial(4)
5 * 4 * factorial(3)
5 * 4 * 3 * factorial(2)
5 * 4 * 3 * 2 * factorial(1)
5 * 4 * 3 * 2 * 1

它被称为递归,该方法每次评估时都会调用自身,直到它满足此语句正在执行的基本情况1:n == 0 ? 1 : n*factorial(n-1) :)