这个方法如何解决我的阶乘?

the*_*ing 2 ruby factorial

我正在研究一个红宝石挑战,并且必须编写一个方法来计算一个数字的因子.我在下面遇到了一个解决方案,但我不明白它是如何工作的,特别是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 ?我知道这似乎应该是显而易见的,但这不适合我.提前感谢您的帮助.

hji*_*ing 5

这个概念称为递归.

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)