Šiame straipsnyje jūs išmoksite sukurti rekursinę funkciją; funkcija, kuri save vadina.
Funkcija, kuri save vadina, vadinama rekursine funkcija. Ši technika yra žinoma kaip rekursija. Kurdami rekursinę funkciją, turite sukurti sąlygą, kad ši funkcija nevadintų savęs neribotai (be galo).
Kaip rekursija veikia „Swift“?
func recurse () (// teiginiai recurse ()) recurse ()
Žemiau pateiktame paveikslėlyje parodyta, kaip veikia rekursija, skambinant sau vėl ir vėl.
Aukščiau pateiktoje schemoje rekursija vykdoma be galo. Tačiau beveik visą laiką sukuriate rekursiją, kuri vykdoma, kol įvykdoma kokia nors sąlyga.
Norėdami išvengti begalinio rekurso, naudokite rekurzinį skambutį „Swift Conditional Statements“, pvz., Jei… kita sakinyje.
1 pavyzdys: atspausdinkite N teigiamus skaičius
func countDownToZero(num: Int) ( print(num) if num> 0 ( countDownToZero(num: num - 1) ) ) print("Countdown:") countDownToZero(num:3)
Kai paleisite šią programą, išvestis bus:
Atgalinis laikas: 3 2 1 0
Pirmiau pateiktoje programoje teiginys print("Countdown:")
išvesties į Countdown: konsolėje. Ir sakinys countDownToZero(num:3)
iškviečia funkciją, kuri ima parametrą Integer
.
Funkcijos viduje esantis sakinys countDownToZero()
vykdomas ir, jei sąlyga num> 0
įvykdoma, funkcija countDownToZero()
vėl iškviečiama kaip countDownToZero(num: num - 1)
.
Jei sąlyga netenkinama, funkcijos iškvietimas neatliekamas ir rekursija sustoja.
Pažiūrėkime tai žingsneliais
Vykdymo veiksmaiŽingsniai | Funkcijos iškvietimas | Atspausdinta | skaičius> 0? |
---|---|---|---|
1 | countDownToZero(3) | 3 | Taip |
2 | countDownToZero(2) | 2 | Taip |
3 | countDownToZero(1) | 1 | Taip |
4 | countDownToZero(0) | 0 | Ne (baigiasi) |
2 pavyzdys: raskite skaičiaus faktorialą
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)")
Kai paleisite šią programą, išvestis bus:
4 faktorius yra 24
Kaip veikia šis pavyzdys?
Pažiūrėkime tai žingsneliais
Vykdymo veiksmaiŽingsniai | Argumentas priimtas | Grąžinimo pareiškimas | Vertė |
---|---|---|---|
1 | 4 | return 4 * factorial(of:3) | 4 * faktorialas (iš: 3) |
2 | 3 | return 3 * factorial(of:2) | 4 * 3 * faktorialas (iš: 2) |
3 | 2 | return 2 * factorial(of:1) | 4 * 3 * 2 * faktorius (iš: 1) |
4 | 1 | return 1 | 4 * 3 * 2 * 1 |
Paprastai rekursija naudojama kaip iteracijos pakaitalas, kai problemos sprendimą galima rasti maždaug dviem etapais. Pirmasis žingsnis ieško sprendimo, jei ne, pakartokite procesą.