Šajā rakstā jūs iemācīsities izveidot rekursīvu funkciju; funkcija, kas pati sevi sauc.
Funkcija, kas pati sevi sauc, ir pazīstama kā rekursīva funkcija. Šī metode ir pazīstama kā rekursija. Veidojot rekursīvo funkciju, jums ir jāizveido nosacījums, lai funkcija sevi nesauktu bezgalīgi (bezgalīgi).
Kā rekursija darbojas Swift?
func recurse () (// paziņojumi recurse ()) recurse ()
Zemāk redzamais attēls parāda, kā darbojas rekursija, atkal un atkal sevi saucot.
Iepriekš minētajā plūsmas diagrammā rekursija tiek izpildīta bezgalīgi. Tomēr gandrīz visu laiku jūs izveidojat rekursiju, kas tiek izpildīta, līdz tiek izpildīti kādi nosacījumi.
Lai novērstu bezgalīgu rekursiju, izmantojiet rekursīvo zvanu Swift nosacījumu paziņojumos, piemēram, ja … cits.
1. piemērs: izdrukājiet N pozitīvus skaitļus
func countDownToZero(num: Int) ( print(num) if num> 0 ( countDownToZero(num: num - 1) ) ) print("Countdown:") countDownToZero(num:3)
Palaižot šo programmu, izeja būs:
Atskaite: 3 2 1 0
Iepriekš minētajā programmā paziņojums konsolē print("Countdown:")
izvada Countdown:. Un paziņojums countDownToZero(num:3)
izsauc funkciju, kas ņem parametru Integer
.
Funkcijas iekšējais countDownToZero()
izpildījums num> 0
tiek izpildīts, un, ja nosacījums ir izpildīts, funkcija countDownToZero()
tiek izsaukta vēlreiz kā countDownToZero(num: num - 1)
.
Ja nosacījums nav izpildīts, funkcijas izsaukums netiek veikts un rekursija tiek pārtraukta.
Apskatīsim to pa soļiem
Izpildes soļiSoļi | Funkcijas izsaukums | Izdrukāts | num> 0? |
---|---|---|---|
1 | countDownToZero(3) | 3 | Jā |
2 | countDownToZero(2) | 2 | Jā |
3 | countDownToZero(1) | 1 | Jā |
4 | countDownToZero(0) | 0 | Nē (beidzas) |
2. piemērs: atrodiet skaitļa faktoriālu
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)")
Palaižot šo programmu, izeja būs:
4 faktori ir 24
Kā darbojas šis piemērs?
Apskatīsim to pa soļiem
Izpildes soļiSoļi | Arguments pieņemts | Atgriešanās paziņojums | Vērtība |
---|---|---|---|
1 | 4 | return 4 * factorial(of:3) | 4 * faktoriāls (no: 3) |
2 | 3 | return 3 * factorial(of:2) | 4 * 3 * faktoriāls (no: 2) |
3 | 2 | return 2 * factorial(of:1) | 4 * 3 * 2 * faktoriāls (no: 1) |
4 | 1 | return 1 | 4 * 3 * 2 * 1 |
Parasti rekursija tiek izmantota kā atkārtojuma aizstājēja, ja problēmas risinājumu var atrast aptuveni divos posmos. Pirmais solis meklē risinājumu, ja neatkārto procesu.