Greitas rekursija (su pavyzdžiais)

Š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ą.

Įdomios straipsniai...