Swift 遞歸

在本文中,您將學習創(chuàng)建遞歸函數(shù)。一個自我調(diào)用的函數(shù)。

調(diào)用自身的函數(shù)稱為遞歸函數(shù)。并且,這種技術(shù)稱為遞歸。創(chuàng)建遞歸函數(shù)時,必須創(chuàng)建條件,以使函數(shù)不會無限期地調(diào)用自身。

遞歸如何在Swift中工作?

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

下圖顯示了遞歸調(diào)用的方式。

遞歸如何在Swift中工作?

上面的流程圖中,遞歸是無限執(zhí)行的。某些情況下,您可能需要創(chuàng)建一個遞歸,這個遞歸將一直執(zhí)行,直到滿足某些條件為止。

為了防止無限遞歸,請在Swift條件語句內(nèi)使用遞歸調(diào)用,例如if ... else 語句。

示例1:打印N個正數(shù)

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)用并停止遞歸。

讓我們來看一下具體的步驟

執(zhí)行步驟
步驟函數(shù)調(diào)用打印num > 0 ?
1countDownToZero(3)3Yes
2countDownToZero(2)2Yes
3countDownToZero(1)1Yes
4countDownToZero(0)0No (結(jié)束)

示例2:查找數(shù)字的階乘

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

這個實例是如何工作的?

遞歸如何在Swift中進行階乘

讓我們逐步來看一下

執(zhí)行步驟
步驟傳遞的參數(shù)返回語句
14return 4 * factorial(of:3)4 * factorial(of:3)
23return 3 * factorial(of:2)4 *3 * factorial(of:2)
32return 2 * factorial(of:1)4 * 3 *2 * factorial(of:1)
41return 14 * 3 * 2 * 1

當可以在大約兩個步驟中找到問題的解決方案時,通常將遞歸用作迭代的替換。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清