Kiire rekursioon (koos näidetega)

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> 0on 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 etapid
Sammud 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 etapid
Sammud 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.

Huvitavad Artiklid...