了解Elixir

时间:2017-06-25 14:31:19

标签: recursion elixir

我在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,我们呢?如果有人可以打破这个,这将是非常棒的!

1 个答案:

答案 0 :(得分:3)

是的,您明确告诉它要继续直到0.这是第一个子句def factorial(0), do: 1。当你减少到0时,最终会调用这个原因。这个子句突破了递归(返回1并且不再调用factorial)。

另请注意,when n > 0后卫仅用于捕捉您在负数上调用阶乘的情况。例如,在factorial(5)的情况下不使用它。