我在Elixir中创建了一个阶乘函数:
def factorial(0), do: 1
def factorial(n) when n > 0, do: n * factorial(n - 1)
首先,我喜欢Elixir解决方案的简单和优雅。但是,有一件事我不明白。在第二行,我使用了这段代码:do: n * factorial(n - 1)
。假设我们给函数一个参数5.该行看起来像这样。 do: 5 * factorial(5 - 1)
那么为什么答案才会出现:20
?基本上我的问题是。如何继续基本案例?我们没有明确告诉程序要等到0,我们呢?如果有人可以打破这个,这将是非常棒的!
答案 0 :(得分:3)
是的,您明确告诉它要继续直到0.这是第一个子句def factorial(0), do: 1
。当你减少到0时,最终会调用这个原因。这个子句突破了递归(返回1并且不再调用factorial)。
另请注意,when n > 0
后卫仅用于捕捉您在负数上调用阶乘的情况。例如,在factorial(5)
的情况下不使用它。