📜  Swift递归

📅  最后修改于: 2021-01-11 07:46:45             🧑  作者: Mango

快速递归

反复调用自身的函数称为递归函数,此技术称为递归。创建递归函数,必须创建一个条件,以使函数不会无限期地调用自身。

例:

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

您可以在上图中看到无限执行递归。为了摆脱这类不确定的递归,我们使用控制语句。

示例:Swift 4程序打印N个正数

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

输出:

Countdown:
6
5
4
3
2
1
0

您可以在上面的程序中看到语句print(“ Countdown:”)提供输出,并且语句countDownToZero(num:3)调用带有参数Integer的函数。

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

当不满足条件时,函数调用不会完成,并且递归会停止。

执行步骤

Steps Function call Printed Is num > 0 ?
1 countDownToZero(6) 6 Yes
2 countDownToZero(5) 5 Yes
3 countDownToZero(4) 4 Yes
4 countDownToZero(3) 3 Yes
5 countDownToZero(2) 2 Yes
6 countDownToZero(1) 1 Yes
7 countDownToZero(0) 0 No (Recursion Ends)

例2:Swift 4程序查找数字的阶乘

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

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

输出:

The factorial of 6 is 720

执行步骤

Steps Argument passed Return statement Value
1 6 return 6 * findFactorial(of:5) 6 * findFactorial(of:5)
2 5 return 5 * findFactorial(of:4) 6 *5 findFactorial(of:4)
3 4 return 4 * findFactorial(of:3) 6 *5*4 findFactorial(of:3)
4 3 return 3 * findFactorial(of:2) 6 *5*4*3 findFactorial(of:2)
5 2 return 2 * findFactorial(of:1) 6*5*4*3*2 findFactorial(of:1)
6 1 return 1 6*5*4*3*2*1