Recursion 用长生不老药理解递归
I在Elixir中创建阶乘函数:Recursion 用长生不老药理解递归,recursion,elixir,Recursion,Elixir,I在Elixir中创建阶乘函数: def factorial(0), do: 1 def factorial(n) when n > 0, do: n * factorial(n - 1) 首先,我喜欢长生不老药的解决方案是多么简单和优雅。但是,有一件事我不明白。在第二行,我使用了以下代码:do:n*factorial(n-1)。假设我们给函数一个5的参数。那条线应该是这样的do:5*factorial(5-1)那么为什么答案不直接出来:20?基本上我的问题是。它如何知道继续基本情况?我
def factorial(0), do: 1
def factorial(n) when n > 0, do: n * factorial(n - 1)
首先,我喜欢长生不老药的解决方案是多么简单和优雅。但是,有一件事我不明白。在第二行,我使用了以下代码:
do:n*factorial(n-1)
。假设我们给函数一个5的参数。那条线应该是这样的do:5*factorial(5-1)
那么为什么答案不直接出来:20
?基本上我的问题是。它如何知道继续基本情况?我们没有明确告诉程序继续到0,是吗?如果有人能把它打破,那就太棒了 是的,您明确告诉它继续,直到0。这是第一个子句所做的def factorial(0),do:1
。当你递减到0时,最终会被调用。它是中断递归的子句(返回1,不再调用阶乘)
还请注意,当n>0时,
保护仅用于捕捉对负数调用阶乘的情况。例如,factorial(5)
的情况下不使用它 是的,您明确告诉它继续,直到0。这是第一个子句所做的def factorial(0),do:1
。当你递减到0时,最终会被调用。它是中断递归的子句(返回1,不再调用阶乘)
还请注意,当n>0时,保护仅用于捕捉对负数调用阶乘的情况。例如,factorial(5)
的情况下不使用它