- Elixir 教程
- Elixir - 首页
- Elixir - 概述
- Elixir - 环境
- Elixir - 基本语法
- Elixir - 数据类型
- Elixir - 变量
- Elixir - 运算符
- Elixir - 模式匹配
- Elixir - 决策
- Elixir - 字符串
- Elixir - 字符列表
- Elixir - 列表和元组
- Elixir - 关键字列表
- Elixir - 映射
- Elixir - 模块
- Elixir - 别名
- Elixir - 函数
- Elixir - 递归
- Elixir - 循环
- Elixir - 可枚举
- Elixir - 流
- Elixir - 结构体
- Elixir - 协议
- Elixir - 文件 I/O
- Elixir - 进程
- Elixir - 符号
- Elixir - 推导式
- Elixir - 类型规范
- Elixir - 行为
- Elixir - 错误处理
- Elixir - 宏
- Elixir - 库
- Elixir 有用资源
- Elixir - 快速指南
- Elixir - 有用资源
- Elixir - 讨论
Elixir - 递归
递归是一种方法,其中问题的解决方案取决于相同问题较小实例的解决方案。大多数计算机编程语言通过允许函数在程序文本中调用自身来支持递归。
理想情况下,递归函数具有一个结束条件。这个结束条件,也称为基本情况,停止重新进入函数并将函数调用添加到堆栈中。这是递归函数调用停止的地方。让我们考虑以下示例以进一步了解递归函数。
defmodule Math do def fact(res, num) do if num === 1 do res else new_res = res * num fact(new_res, num-1) end end end IO.puts(Math.fact(1,5))
运行上述程序时,会生成以下结果:
120
因此,在上述函数 Math.fact 中,我们正在计算一个数的阶乘。请注意,我们在函数内部调用了函数本身。现在让我们了解它是如何工作的。
我们为它提供了 1 和我们想要计算其阶乘的数字。该函数检查数字是否为 1,如果是则返回 res (结束条件)。否则,它创建一个变量 new_res 并将其值赋为先前 res * 当前 num。它返回函数调用 fact(new_res, num-1) 返回的值。这会重复,直到我们得到 num 为 1。一旦发生这种情况,我们就会得到结果。
让我们考虑另一个示例,逐个打印列表中的每个元素。为此,我们将利用列表的 hd 和 tl 函数以及函数中的模式匹配:
a = ["Hey", 100, 452, :true, "People"] defmodule ListPrint do def print([]) do end def print([head | tail]) do IO.puts(head) print(tail) end end ListPrint.print(a)
当我们有一个空列表时,第一个 print 函数被调用 (结束条件)。否则,将调用第二个 print 函数,该函数将列表分成两部分,并将列表的第一个元素分配给 head,将列表的其余部分分配给 tail。然后打印 head,我们再次使用列表的其余部分(即 tail)调用 print 函数。运行上述程序时,会产生以下结果:
Hey 100 452 true People
广告