Swift 递归

调用自身的函数称为递归函数。而这种技术称为递归。

一个物理世界的例子就是放置两面平行相对的镜子。它们之间的任何物体都会被递归地反射。


Swift 中递归的工作原理

func recurse() {
  ... ...  
  recurse()
  ...  ...     
}

recurse()

在这里,recurse() 函数一遍又一遍地调用自身。下图展示了递归的工作原理。

Swift Recursion
Swift 函数递归的工作原理

递归的停止条件

如果我们不设置任何条件来中断递归调用,函数将无限地调用自身。

我们使用if...else 语句(或类似方法)来中断递归。

通常,递归函数有两个分支:

  • 一个用于递归调用。
  • 另一个用于在特定条件下中断调用。

例如,

func recurse() {

  if(condition) {
    // break recursive call
    recurse()
  }

  else {
    // recursive call
    recurse()
  }
}

// function call 
recurse()

示例 1:Swift 函数递归

// program to count down number to 0

func countDown(number: Int) {

  // display the number
  print(number)

  // condition to break recursion
  if number == 0 {
  print("Countdown Stops")
  }

  // condition for recursion call
  else {
  
    // decrease the number value
    countDown(number: number - 1)
  }
}


print("Countdown:")
countDown(number:3)

输出

Countdown:
3
2
1
0
Countdown Stops

在上面的示例中,我们创建了一个名为 countDown() 的递归函数。在这里,函数会调用自身,直到传递给它的数字变为 0

number等于 0 时,if 条件中断了递归调用。

if number == 0 {
print(Countdown Stops)
}

程序的运行方式

迭代 函数调用 打印 number == 0?
1 countDown(3) 3 false
2 countDown(2) 2 false
3 countDown(1) 1 false
4 countDown(0) 0 true(函数调用停止)

示例:计算数字的阶乘

func factorial(num: Int) -> Int {

  // condition to break recursion
  if num == 0 {
    return 1
  } 

  // condition for recursive call
  else {
    return num * factorial(num: num - 1)
  }

}

var number = 3

// function call
var result = factorial(num: number)
print("The factorial of 3 is", result)

输出

The factorial of 3 is 6

在上面的示例中,我们有一个名为 factorial() 的递归函数。请注意这一行:

return num * factorial(num: num - 1)

在这里,我们通过减少 num 参数的值来递归调用 factorial()

  • 最初,factorial()num 的值为 3
  • 在下一次递归调用中,num 变为 2
  • 同样,该过程一直持续到 num 变为 0。
  • num 等于 0 时,if 条件中断了递归调用。

程序的工作原理

Computing Factorial Using Recursion
使用递归计算阶乘

函数递归的优缺点

以下是在 Swift 编程中使用递归的优缺点。

1. 优点

  • 它使我们的代码更短、更简洁。
  • 递归在涉及数据结构和高级算法(如图和树遍历)的问题中是必需的。

2. 缺点

  • 与迭代程序相比,它占用大量堆栈空间。
  • 它使用更多的处理器时间。
  • 与等效的迭代程序相比,它可能更难调试。
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战