在本文中,您將學(xué)習(xí)創(chuàng)建遞歸函數(shù)。一個(gè)自我調(diào)用的函數(shù)。
調(diào)用自身的函數(shù)稱為遞歸函數(shù)。并且,這種技術(shù)稱為遞歸。創(chuàng)建遞歸函數(shù)時(shí),必須創(chuàng)建條件,以使函數(shù)不會(huì)無限期地調(diào)用自身。
func recurse() { //statements recurse() } recurse()
下圖顯示了遞歸調(diào)用的方式。
上面的流程圖中,遞歸是無限執(zhí)行的。某些情況下,您可能需要?jiǎng)?chuàng)建一個(gè)遞歸,這個(gè)遞歸將一直執(zhí)行,直到滿足某些條件為止。
為了防止無限遞歸,請(qǐng)?jiān)赟wift條件語(yǔ)句內(nèi)使用遞歸調(diào)用,例如if ... else 語(yǔ)句。
func countDownToZero(num: Int) { print(num) if num > 0 { countDownToZero(num: num - 1) } } print("Countdown:") countDownToZero(num:3)
當(dāng)您運(yùn)行以下程序時(shí),輸出將是:
Countdown: 3 2 1 0
在上面的程序中,print("Countdown:") 語(yǔ)句在控制臺(tái)中輸出Countdown:。該語(yǔ)句調(diào)用帶有Integer類型參數(shù)的函數(shù) countDownToZero(num:3) 。
countDownToZero()執(zhí)行函數(shù)內(nèi)部的語(yǔ)句,如果滿足條件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)")
當(dāng)您運(yùn)行以下程序時(shí),輸出將是:
The factorial of 4 is 24
步驟 | 傳遞的參數(shù) | 返回語(yǔ)句 | 值 |
---|---|---|---|
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 |
當(dāng)可以在大約兩個(gè)步驟中找到問題的解決方案時(shí),通常將遞歸用作迭代的替換。