Lean 递归函数
递归是编程中的一个重要概念,它允许函数在其定义中调用自身。在Lean中,递归函数是解决许多问题的强大工具,尤其是在处理数学归纳和数据结构时。本文将逐步介绍如何在Lean中定义和使用递归函数,并通过实际案例帮助你理解其应用。
什么是递归函数?
递归函数是一种在其定义中调用自身的函数。递归通常用于解决可以分解为更小、相似子问题的问题。例如,计算阶乘、斐波那契数列或遍历树结构时,递归是非常有用的。
在Lean中,递归函数的定义需要特别注意,因为Lean的类型系统要求递归必须是“结构递归”或“良基递归”,以确保函数总是终止。
定义一个简单的递归函数
让我们从 一个简单的例子开始:计算一个自然数的阶乘。阶乘的定义如下:
- 0的阶乘是1。
- 对于任何正整数n,n的阶乘是n乘以(n-1)的阶乘。
在Lean中,我们可以这样定义阶乘函数:
def factorial : Nat → Nat
| 0 => 1
| n + 1 => (n + 1) * factorial n
在这个定义中,我们使用了模式匹配来处理不同的情况。当输入为0时,返回1;否则,递归地计算n-1
的阶乘,并将结果乘以n
。
示例
让我们计算5的阶乘:
#eval factorial 5 -- 输出: 120