原文: https://www.programiz.com/swift-programming/recursion

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

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

递归在 Swift 中如何工作?

  1. func recurse() {
  2. //statements
  3. recurse()
  4. }
  5. recurse()

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

Swift 递归 - 图1

在上面的流程图中,递归是无限执行的。 但是,几乎所有情况下,您都会创建一个递归,该递归将一直执行到满足某些条件为止。

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


示例 1:打印 N 个正数

  1. func countDownToZero(num: Int) {
  2. print(num)
  3. if num > 0 {
  4. countDownToZero(num: num - 1)
  5. }
  6. }
  7. print("Countdown:")
  8. countDownToZero(num:3)

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

  1. Countdown:
  2. 3
  3. 2
  4. 1
  5. 0

在上述程序中,语句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:查找数字的阶乘

  1. func factorial(of num: Int) -> Int {
  2. if num == 1 {
  3. return 1
  4. } else {
  5. return num * factorial(of:num - 1)
  6. }
  7. }
  8. let x = 4
  9. let result = factorial(of: x)
  10. print("The factorial of \(x) is \(result)")

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

  1. The factorial of 4 is 24

这个例子是如何工作的?

Swift 递归 - 图2

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

当可以在大约两个步骤中找到问题的解决方案时,通常将递归用作迭代的替换。 如果没有重复该过程,则第一步将搜索解决方案。