在本文中,您将学习创建递归函数。 一个自我调用的函数。
调用自身的函数被称为递归函数。 并且,这种技术称为递归。 创建递归函数时,必须创建一个条件,以使函数不会无限期地(无限期地)调用自身。
递归在 Swift 中如何工作?
func recurse() {//statementsrecurse()}recurse()
下图显示了递归调用的方式。

在上面的流程图中,递归是无限执行的。 但是,几乎所有情况下,您都会创建一个递归,该递归将一直执行到满足某些条件为止。
为防止无限递归,请在 Swift 条件语句中使用递归调用,例如if...else语句。
示例 1:打印 N 个正数
func countDownToZero(num: Int) {print(num)if num > 0 {countDownToZero(num: num - 1)}}print("Countdown:")countDownToZero(num:3)
当您运行以下程序时,输出将是:
Countdown:3210
在上述程序中,语句print("Countdown:")在控制台中输出Countdown。 语句countDownToZero(num:3)调用带有参数Integer的函数。
执行函数countDownToZero()内的语句,如果满足条件num > 0,则再次调用函数countDownToZero()作为countDownToZero(num: num - 1)。
如果不满足条件,则函数调用不会完成,并且递归会停止。
让我们逐步来看一下
执行步骤
| 步骤 | 函数调用 | 打印 | num > 0? |
|---|---|---|---|
| 1 | countDownToZero(3) |
3 | 是 |
| 2 | countDownToZero(2) |
2 | 是 |
| 3 | countDownToZero(1) |
1 | 是 |
| 4 | countDownToZero(0) |
0 | 否(结束) |
示例 2:查找数字的阶乘
func factorial(of num: Int) -> Int {if num == 1 {return 1} else {return num * factorial(of:num - 1)}}let x = 4let result = factorial(of: x)print("The factorial of \(x) is \(result)")
当您运行以下程序时,输出将是:
The factorial of 4 is 24
这个例子是如何工作的?

Let’s see this in steps
执行步骤
| 步骤 | 传递的参数 | return语句 |
值 |
|---|---|---|---|
| 1 | 4 | return 4 * factorial(of:3) |
4 * factorial(of:3) |
| 2 | 3 | return 3 * factorial(of:2) |
4 * 3 * factorial(of:2) |
| 3 | 2 | return 2 * factorial(of:1) |
4 * 3 * 2 * factorial(of:1) |
| 4 | 1 | return 1 |
4 * 3 * 2 * 1 |
当可以在大约两个步骤中找到问题的解决方案时,通常将递归用作迭代的替换。 如果没有重复该过程,则第一步将搜索解决方案。
