Selles artiklis õpitakse looma rekursiivset funktsiooni; funktsioon, mis kutsub ennast.
Funktsioon, mis ennast kutsub, on tuntud kui rekursiivne funktsioon. Ja seda tehnikat tuntakse rekursioonina. Rekursiivse funktsiooni loomisel peate looma tingimuse, nii et funktsioon ei nimetaks ennast lõputult (lõpmatult).
Kuidas rekursioon Swiftis töötab?
func recurse () (// avaldused recurse ()) recurse ()
Alloleval joonisel on näidatud, kuidas rekursioon töötab, kutsudes ennast ikka ja jälle.
Ülaltoodud vooskeemis teostatakse rekursioon lõpmatult. Peaaegu alati loote aga rekursiooni, mis toimub seni, kuni mõni tingimus on täidetud.
Lõputu rekursiooni vältimiseks kasutage kiiret tingimuslauset sisaldavat rekursiivset kõnet, nt kui… muu lause.
Näide 1: printige N positiivset arvu
func countDownToZero(num: Int) ( print(num) if num> 0 ( countDownToZero(num: num - 1) ) ) print("Countdown:") countDownToZero(num:3)
Järgmise programmi käivitamisel on väljund:
Taimer: 3 2 1 0
Eespool programmi avalduse print("Countdown:")
väljundid Countdown: konsoolis. Ja lause countDownToZero(num:3)
kutsub funktsiooni, mis võtab parameetri Integer
.
Funktsiooni sees olev lause täidetakse countDownToZero()
ja kui tingimus num> 0
on täidetud, countDownToZero()
kutsutakse funktsiooni uuesti kui countDownToZero(num: num - 1)
.
Kui tingimus ei ole täidetud, siis funktsiooni väljakutset ei tehta ja rekursioon peatub.
Vaatame seda sammude kaupa
Täitmise etapidSammud | Funktsioonikõne | Trükitud | arv> 0? |
---|---|---|---|
1 | countDownToZero(3) | 3 | Jah |
2 | countDownToZero(2) | 2 | Jah |
3 | countDownToZero(1) | 1 | Jah |
4 | countDownToZero(0) | 0 | Ei (lõpeb) |
Näide 2: Leidke arvu faktoriaal
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)")
Järgmise programmi käivitamisel on väljund:
4 faktorial on 24
Kuidas see näide töötab?
Vaatame seda sammude kaupa
Täitmise etapidSammud | Argument läbitud | Tagasilause | Väärtus |
---|---|---|---|
1 | 4 | return 4 * factorial(of:3) | 4 * faktoriaal (3-st) |
2 | 3 | return 3 * factorial(of:2) | 4 * 3 * faktoriaal (2-st) |
3 | 2 | return 2 * factorial(of:1) | 4 * 3 * 2 * faktoriaal (1-st) |
4 | 1 | return 1 | 4 * 3 * 2 * 1 |
Tavaliselt kasutatakse rekursiooni iteratsiooni asendajana, kui probleemile saab lahenduse leida umbes kahes etapis. Esimese sammuna otsitakse lahendust, kui mitte korrata protsessi.