Swift 递归

在本文中,您将学习创建递归函数。一个自我调用的函数。

调用自身的函数称为递归函数。并且,这种技术称为递归。创建递归函数时,必须创建条件,以使函数不会无限期地调用自身。

递归如何在Swift中工作?

func recurse() {
    //statements
    recurse()
}
recurse()

下图显示了递归调用的方式。

递归如何在Swift中工作?

上面的流程图中,递归是无限执行的。某些情况下,您可能需要创建一个递归,这个递归将一直执行,直到满足某些条件为止。

为了防止无限递归,请在Swift条件语句内使用递归调用,例如if ... else 语句

示例1:打印N个正数

func countDownToZero(num: Int) {
    print(num)
    if num > 0 {
        countDownToZero(num: num - 1)
    }
}
print("Countdown:")
countDownToZero(num:3)

当您运行以下程序时,输出将是:

Countdown:
3
2
1
0

在上面的程序中,print("Countdown:") 语句在控制台中输出Countdown:。该语句调用带有Integer类型参数的函数 countDownToZero(num:3) 。

countDownToZero()执行函数内部的语句,如果满足条件num > 0,countDownToZero()则再次调用函数 countDownToZero(num: num - 1)。

如果不满足条件,则不执行函数调用并停止递归。

让我们来看一下具体的步骤

执行步骤
步骤函数调用打印num > 0 ?
1countDownToZero(3)3Yes
2countDownToZero(2)2Yes
3countDownToZero(1)1Yes
4countDownToZero(0)0No (结束)

示例2:查找数字的阶乘

func factorial(of num: Int) -> Int {
    if num == 1 {
        return 1
    } else {
        return num * factorial(of:num - 1)
    }
}

let x = 4
let result = factorial(of: x)
print("The factorial of \(x) is \(result)")

当您运行以下程序时,输出将是:

The factorial of 4 is 24

这个实例是如何工作的?

递归如何在Swift中进行阶乘

让我们逐步来看一下

执行步骤
步骤传递的参数返回语句
14return 4 * factorial(of:3)4 * factorial(of:3)
23return 3 * factorial(of:2)4 *3 * factorial(of:2)
32return 2 * factorial(of:1)4 * 3 *2 * factorial(of:1)
41return 14 * 3 * 2 * 1

当可以在大约两个步骤中找到问题的解决方案时,通常将递归用作迭代的替换。