我正在阅读Elixir in Action一书,我有点难以理解以下示例的工作原理.
defmodule NaturalNums do
def print(1), do: IO.puts(1)
def print(n) do
print(n - 1)
IO.puts(n)
end
end
Run Code Online (Sandbox Code Playgroud)
给出这个输出:
iex(2)> NaturalNums.print(3)
1
2
3
Run Code Online (Sandbox Code Playgroud)
我感到困惑的是这个模块如何从1开始向上计数而不是从3向下计数.不应该先打印3然后打印2然后打1?1是最后一个因为它停止了递归.
浏览该模块的控制流程会很有帮助
该puts呼叫递归调用后发生print.因此,虽然传递的输入遵循命令3,2,1,但puts命令将以相反的顺序执行.粗略地说,这就是它的方式: