V tomto článku sa naučíte vytvárať rekurzívne funkcie; funkcia, ktorá si hovorí.
Funkcia, ktorá si hovorí, je známa ako rekurzívna funkcia. A táto technika je známa ako rekurzia. Pri vytváraní rekurzívnej funkcie musíte vytvoriť podmienku, aby sa funkcia nenazývala donekonečna (nekonečne).
Ako funguje rekurzia v Swifte?
func recurse () (// príkazy recurse ()) recurse ()
Obrázok nižšie ukazuje, ako funguje rekurzia, keď sa volá znova a znova.
Vo vyššie uvedenom vývojovom diagrame sa rekurzia vykonáva nekonečne. Takmer vždy však vytvoríte rekurziu, ktorá sa vykoná, kým nebude splnená niektorá podmienka.
Aby ste zabránili nekonečnej rekurzii, použite rekurzívne volanie vo vnútri príkazov Swift Conditional Statements, napr. If … else.
Príklad 1: Vytlačte N kladných čísel
func countDownToZero(num: Int) ( print(num) if num> 0 ( countDownToZero(num: num - 1) ) ) print("Countdown:") countDownToZero(num:3)
Keď spustíte nasledujúci program, výstup bude:
Odpočítavanie: 3 2 1 0
Vo vyššie uvedenom programe má výpis print("Countdown:")
výstupy Countdown: v konzole. A vyhlásenie countDownToZero(num:3)
volá funkciu, ktorá berie parameter Integer
.
Príkaz vo vnútri funkcie sa countDownToZero()
vykoná a ak je podmienka num> 0
splnená, funkcia countDownToZero()
sa zavolá znova ako countDownToZero(num: num - 1)
.
Ak podmienka nie je splnená, volanie funkcie sa neurobí a rekurzia sa zastaví.
Pozrime sa na to v krokoch
Kroky vykonaniaKroky | Volanie funkcie | Vytlačené | počet> 0? |
---|---|---|---|
1 | countDownToZero(3) | 3 | Áno |
2 | countDownToZero(2) | 2 | Áno |
3 | countDownToZero(1) | 1 | Áno |
4 | countDownToZero(0) | 0 | Nie (končí) |
Príklad 2: Nájdite faktoriál čísla
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)")
Keď spustíte nasledujúci program, výstup bude:
Faktoriál 4 je 24
Ako funguje tento príklad?
Pozrime sa na to v krokoch
Kroky vykonaniaKroky | Argument prešiel | Vyhlásenie o vrátení tovaru | Hodnota |
---|---|---|---|
1 | 4 | return 4 * factorial(of:3) | 4 * faktoriál (z: 3) |
2 | 3 | return 3 * factorial(of:2) | 4 * 3 * faktoriál (z: 2) |
3 | 2 | return 2 * factorial(of:1) | 4 * 3 * 2 * faktoriál (z: 1) |
4 | 1 | return 1 | 4 * 3 * 2 * 1 |
Rekurzia sa zvyčajne používa ako náhrada iterácie, keď riešenie problému možno nájsť asi v dvoch krokoch. Prvý krok hľadá riešenie, ak nie opakuje postup.