Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Recursion 用长生不老药理解递归_Recursion_Elixir - Fatal编程技术网

Recursion 用长生不老药理解递归

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?基本上我的问题是。它如何知道继续基本情况?我

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
?基本上我的问题是。它如何知道继续基本情况?我们没有明确告诉程序继续到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)
的情况下不使用它