📜  Swift 递归

📅  最后修改于: 2020-10-09 16:07:12             🧑  作者: Mango

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

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

递归如何在Swift中工作?
func recurse() {
    //statements
    recurse()
}
recurse()

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

How recursion works in 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:。语句countDownToZero(num:3)调用带有参数Integer的函数 。

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

如果不满足条件,则函数调用不会完成,并且递归将停止。

让我们逐步来看一下

Execution steps
Steps Function call Printed num > 0 ?
1 countDownToZero(3) 3 Yes
2 countDownToZero(2) 2 Yes
3 countDownToZero(1) 1 Yes
4 countDownToZero(0) 0 No (Ends)

示例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

这个例子是如何工作的?

How recursion works for factorial in Swift

让我们逐步来看一下

Execution steps
Steps Argument passed Return statement Value
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

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