Nopea rekursio (esimerkkien kanssa)

Tässä artikkelissa opit luomaan rekursiivisen funktion; toiminto, joka kutsuu itseään.

Itsensä kutsuva toiminto tunnetaan rekursiivisena funktiona. Ja tämä tekniikka tunnetaan rekursiona. Rekursiivisen funktion luomisen yhteydessä sinun on luotava ehto, jotta toiminto ei kutsu itseään loputtomasti (äärettömästi).

Kuinka rekursio toimii Swiftissä?

 func recurse () (// lauseet recurse ()) recurse () 

Alla oleva kuva osoittaa, kuinka rekursio toimii kutsumalla itseään uudestaan ​​ja uudestaan.

Yllä olevassa vuokaaviossa rekursio suoritetaan loputtomasti. Melkein koko ajan luot kuitenkin rekursio, joka suoritetaan, kunnes jokin ehto täyttyy.

Voit estää äärettömän toistumisen käyttämällä rekursiivista kutsua Swift-ehdollisten lauseiden sisällä, esim. Jos… muuta lauseketta.

Esimerkki 1: Tulosta N positiivista lukua

 func countDownToZero(num: Int) ( print(num) if num> 0 ( countDownToZero(num: num - 1) ) ) print("Countdown:") countDownToZero(num:3) 

Kun suoritat seuraavan ohjelman, tulos on:

 Lähtölaskenta: 3 2 1 0

Yllä olevassa ohjelmassa lauseke print("Countdown:")tuottaa Countdown: -konsolissa. Ja lauseke countDownToZero(num:3)kutsuu funktiota, joka ottaa parametrin Integer.

Funktion sisällä oleva käsky countDownToZero()suoritetaan, ja jos ehto num> 0täyttyy, funktiota countDownToZero()kutsutaan uudelleen nimellä countDownToZero(num: num - 1).

Jos ehto ei täyty, toimintopyyntöä ei suoriteta ja rekursio loppuu.

Katsotaanpa tämä vaiheittain

Suoritusvaiheet
Askeleet Toimintakutsu Painettu numero> 0?
1 countDownToZero(3) 3 Joo
2 countDownToZero(2) 2 Joo
3 countDownToZero(1) 1 Joo
4 countDownToZero(0) 0 Ei (päättyy)

Esimerkki 2: Etsi luvun faktori

 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)") 

Kun suoritat seuraavan ohjelman, tulos on:

 4: n kerroin on 24

Kuinka tämä esimerkki toimii?

Katsotaanpa tämä vaiheittain

Suoritusvaiheet
Askeleet Väite hyväksytty Palautuslauseke Arvo
1 4 return 4 * factorial(of:3) 4 * kerroin (/ 3)
2 3 return 3 * factorial(of:2) 4 * 3 * kerroin (/ 2)
3 2 return 2 * factorial(of:1) 4 * 3 * 2 * kerroin (/: 1)
4 1 return 1 4 * 3 * 2 * 1

Tavallisesti rekursiota käytetään iteraation korvikkeena, kun ongelman ratkaisu löytyy noin kahdesta vaiheesta. Ensimmäinen vaihe etsii ratkaisua, ellei toista prosessia.

Mielenkiintoisia artikkeleita...