我正在研究一个红宝石挑战,并且必须编写一个方法来计算一个数字的因子.我在下面遇到了一个解决方案,但我不明白它是如何工作的,特别是else语句中的部分:
def factorial(number)
if number <= 1
1
else
number * factorial(number - 1)
end
end
Run Code Online (Sandbox Code Playgroud)
假设我运行factorial(5) else语句如何在数字*factorial(number - 1)语句中迭代5*4*3*2*1 ?我知道这似乎应该是显而易见的,但这不适合我.提前感谢您的帮助.
这个概念称为递归.
factorial(5)评估为
5 * factorial(4)
Run Code Online (Sandbox Code Playgroud)
factorial(4)评估为
4 * factorial(3)
Run Code Online (Sandbox Code Playgroud)
factorial(3)评估为
3 * factorial(2)
Run Code Online (Sandbox Code Playgroud)
factorial(2)评估为
2 * factorial(1)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)