Python rekursija (rekursīvā funkcija)

Šajā apmācībā jūs iemācīsities izveidot rekursīvu funkciju (funkciju, kas pati sevi sauc).

Kas ir rekursija?

Rekursija ir process, kurā kaut ko definē pati par sevi.

Fiziskās pasaules piemērs būtu divu paralēlu spoguļu novietošana viens otram pretī. Jebkurš objekts starp tiem tiks atspoguļots rekursīvi.

Python rekursīvā funkcija

Programmā Python mēs zinām, ka funkcija var izsaukt citas funkcijas. Funkcijai pat ir iespējams sevi izsaukt. Šie konstrukciju veidi tiek saukti par rekursīvām funkcijām.

Šajā attēlā parādīts, kā darbojas rekursīvā funkcija recurse.

Rekursīvā funkcija Python

Šis ir rekursīvas funkcijas piemērs, lai atrastu vesela skaitļa faktoriālu.

Skaitļa koeficients ir visu skaitļu no 1 līdz šim skaitlim reizinājums. Piemēram, koeficients 6 (apzīmēts kā 6!) Ir 1 * 2 * 3 * 4 * 5 * 6 = 720.

Rekursīvās funkcijas piemērs

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

Rezultāts

 Faktoriāls 3 ir 6

Iepriekš minētajā piemērā factorial()tā ir rekursīva funkcija, kā tā pati sevi dēvē.

Kad mēs šo funkciju izsauksim ar pozitīvu veselu skaitli, tā rekursīvi sauks sevi, samazinot skaitli.

Katra funkcija reizina skaitli ar skaitļa faktoriālu zem tā, līdz tas ir vienāds ar vienu. Šo rekursīvo zvanu var izskaidrot šādās darbībās.

 faktoriāls (3) # 1. zvans ar 3 3 * faktoriāls (2) # 2. zvans ar 2 3 * 2 * faktoriāls (1) # 3. zvans ar 1 3 * 2 * 1 # atgriešanās no 3. zvana kā numurs = 1 3 * 2 # atgriešanās no 2. zvana 6 # atgriešanās no 1. zvana

Apskatīsim attēlu, kas parāda pakāpenisku notiekošā procesu:

Rekursīvās faktoriālās funkcijas izstrāde

Mūsu rekursija beidzas, kad to skaits samazinās līdz 1. To sauc par bāzes nosacījumu.

Katrai rekursīvajai funkcijai ir jābūt pamatnosacījumam, kas aptur rekursiju, pretējā gadījumā funkcija sevi sauc bezgalīgi.

Python tulks ierobežo rekursijas dziļumu, lai palīdzētu izvairīties no bezgalīgām rekursijām, kā rezultātā rodas kaudzes pārpilde.

Pēc noklusējuma rekursijas maksimālais dziļums ir 1000. Ja tiek pārsniegta robeža, tā rezultātā RecursionError. Apskatīsim vienu šādu nosacījumu.

 def recursor(): recursor() recursor()

Rezultāts

 Traceback (pēdējais zvans pēdējais): Fails "", 3. rindiņa failā "", 2. rindiņa, failā "", 2. rindiņa, failā "", 2. rindiņa, failā "", 2. rindiņa, rindā (Iepriekšējā rinda atkārtota vēl 996 reizes ) RecursionError: pārsniegts maksimālais rekursijas dziļums

Rekursijas priekšrocības

  1. Rekursīvās funkcijas padara kodu tīru un elegantu.
  2. Izmantojot rekursiju, sarežģītu uzdevumu var sadalīt vienkāršākās apakšproblēmās.
  3. Secības ģenerēšana ir vienkāršāka ar rekursiju, nekā izmantojot kādu ligzdotu atkārtojumu.

Rekursijas trūkumi

  1. Dažreiz rekursijas loģiku ir grūti ievērot.
  2. Rekursīvie zvani ir dārgi (neefektīvi), jo tie aizņem daudz atmiņas un laika.
  3. Rekursīvās funkcijas ir grūti atkļūdot.

Interesanti raksti...