#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)。
看起来阶乘函数是在阶乘函数中调用的,但那不是正确的吗?
答案 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)
:)