Swift 递归
在本文中,您将学习创建递归函数。一个自我调用的函数。
调用自身的函数称为递归函数。并且,这种技术称为递归。创建递归函数时,必须创建条件,以使函数不会无限期地调用自身。
递归如何在Swift中工作?
func recurse() { //statements recurse() } 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: 3 2 1 0
在上面的程序中,print("Countdown:") 语句在控制台中输出Countdown:。该语句调用带有Integer类型参数的函数 countDownToZero(num:3) 。
countDownToZero()执行函数内部的语句,如果满足条件num > 0,countDownToZero()则再次调用函数 countDownToZero(num: num - 1)。
如果不满足条件,则不执行函数调用并停止递归。
让我们来看一下具体的步骤
步骤 | 函数调用 | 打印 | num > 0 ? |
---|---|---|---|
1 | countDownToZero(3) | 3 | Yes |
2 | countDownToZero(2) | 2 | Yes |
3 | countDownToZero(1) | 1 | Yes |
4 | countDownToZero(0) | 0 | No (结束) |
示例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
这个实例是如何工作的?
让我们逐步来看一下
步骤 | 传递的参数 | 返回语句 | 值 |
---|---|---|---|
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 |
当可以在大约两个步骤中找到问题的解决方案时,通常将递归用作迭代的替换。