📅  最后修改于: 2021-01-11 07:46:45             🧑  作者: Mango
反复调用自身的函数称为递归函数,此技术称为递归。创建递归函数,必须创建一个条件,以使函数不会无限期地调用自身。
func recurse() {
//statements
recurse()
}
recurse()
您可以在上图中看到无限执行递归。为了摆脱这类不确定的递归,我们使用控制语句。
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) |
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 |