„Python“ rekursija (rekursinė funkcija)

Šioje pamokoje išmoksite sukurti rekursinę funkciją (funkciją, kuri save vadina).

Kas yra rekursija?

Rekursija yra procesas, kai kažkas apibrėžiamas savaime.

Fizinio pasaulio pavyzdys būtų dviejų lygiagrečių veidrodžių pastatymas vienas priešais kitą. Bet koks tarp jų esantis objektas būtų atspindėtas rekursiškai.

„Python“ rekursinė funkcija

„Python“ žinome, kad funkcija gali iškviesti kitas funkcijas. Net įmanoma, kad funkcija pati save vadintų. Šios konstrukcijos rūšys vadinamos rekursinėmis funkcijomis.

Šiame paveikslėlyje parodyta vadinamosios rekursinės funkcijos veikimas recurse.

Rekursinė funkcija „Python“

Toliau pateikiamas rekursinės funkcijos pavyzdys, norint rasti sveiko skaičiaus faktorialą.

Skaičio faktorius yra visų sveikųjų skaičių nuo 1 iki šio skaičiaus sandauga. Pavyzdžiui, koeficientas 6 (žymimas kaip 6!) Yra 1 * 2 * 3 * 4 * 5 * 6 = 720.

Rekursinės funkcijos pavyzdys

 def factorial(x): """This is a recursive function to find the factorial of an integer""" if x == 1: return 1 else: return (x * factorial(x-1)) num = 3 print("The factorial of", num, "is", factorial(num))

Rezultatas

 3 faktorius yra 6

Ankstesniame pavyzdyje factorial()yra rekursinė funkcija, kaip ji save vadina.

Kai šią funkciją vadinsime teigtu sveikuoju skaičiumi, ji rekursyviai pasikvies sumažindama skaičių.

Kiekviena funkcija padaugina skaičių iš faktoriaus skaičiaus po juo, kol jis bus lygus vienam. Šį rekursinį skambutį galima paaiškinti atlikus šiuos veiksmus.

 faktorius (3) # 1 skambutis su 3 3 * faktoriumi (2) # 2 skambutis su 2 3 * 2 * faktoriumi (1) # 3 skambutis su 1 3 * 2 * 1 # grįžimas iš 3 skambučio numeriu = 1 3 * 2 # grįžimas iš 2 skambučio 6 # grįžimas iš 1 skambučio

Pažvelkime į vaizdą, kuriame rodomas žingsnis po žingsnio vykstantis procesas:

Rekursinės faktorinės funkcijos veikimas

Mūsų rekursija baigiasi, kai skaičius sumažėja iki 1. Tai vadinama pagrindine sąlyga.

Kiekviena rekursinė funkcija turi turėti pagrindinę sąlygą, kuri sustabdo rekursiją, kitaip funkcija save vadina be galo.

„Python“ vertėjas riboja rekursijos gylį, kad padėtų išvengti begalinių rekursijų, o tai lemia kamino perpildymą.

Pagal numatytuosius nustatymus maksimalus rekursijos gylis yra 1000. Jei peržengiama riba, tai atsiranda RecursionError. Pažvelkime į vieną iš tokių sąlygų.

 def recursor(): recursor() recursor()

Rezultatas

 „Traceback“ (paskutinis paskutinis skambutis paskutinis): failas „“, 3 eilutė, faile „“, 2 eilutė, faile „“, 2 eilutė, faile „“, 2 eilutė, faile „“, 2 eilutė, (ankstesnė eilutė pakartota dar 996 kartus ) RecursionError: viršytas didžiausias rekursijos gylis

Rekursijos privalumai

  1. Dėl rekursinių funkcijų kodas atrodo švarus ir elegantiškas.
  2. Sudėtingą užduotį galima suskirstyti į paprastesnes sub-problemas naudojant rekursiją.
  3. Sekos generavimas yra lengvesnis naudojant rekursiją, nei naudojant kai kurias įdėtas iteracijas.

Rekursijos trūkumai

  1. Kartais rekurso logika yra sunkiai įgyvendinama.
  2. Rekursiniai skambučiai yra brangūs (neefektyvūs), nes užima daug atminties ir laiko.
  3. Rekursines funkcijas sunku derinti.

Įdomios straipsniai...