在本文中,您將學習創(chuàng)建遞歸函數(shù)。一個自我調(diào)用的函數(shù)。
調(diào)用自身的函數(shù)稱為遞歸函數(shù)。并且,這種技術(shù)稱為遞歸。創(chuàng)建遞歸函數(shù)時,必須創(chuàng)建條件,以使函數(shù)不會無限期地調(diào)用自身。
func recurse() { //statements recurse() } recurse()
下圖顯示了遞歸調(diào)用的方式。
上面的流程圖中,遞歸是無限執(zhí)行的。某些情況下,您可能需要創(chuàng)建一個遞歸,這個遞歸將一直執(zhí)行,直到滿足某些條件為止。
為了防止無限遞歸,請在Swift條件語句內(nèi)使用遞歸調(diào)用,例如if ... else 語句。
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:。該語句調(diào)用帶有Integer類型參數(shù)的函數(shù) countDownToZero(num:3) 。
countDownToZero()執(zhí)行函數(shù)內(nèi)部的語句,如果滿足條件num > 0,countDownToZero()則再次調(diào)用函數(shù) countDownToZero(num: num - 1)。
如果不滿足條件,則不執(zhí)行函數(shù)調(diào)用并停止遞歸。
步驟 | 函數(shù)調(diào)用 | 打印 | num > 0 ? |
---|---|---|---|
1 | countDownToZero(3) | 3 | Yes |
2 | countDownToZero(2) | 2 | Yes |
3 | countDownToZero(1) | 1 | Yes |
4 | countDownToZero(0) | 0 | No (結(jié)束) |
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
步驟 | 傳遞的參數(shù) | 返回語句 | 值 |
---|---|---|---|
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 |
當可以在大約兩個步驟中找到問題的解決方案時,通常將遞歸用作迭代的替換。