Pythoni rekursioon (rekursiivne funktsioon)

Selles õpetuses õpitakse looma rekursiivset funktsiooni (funktsioon, mis kutsub ennast).

Mis on rekursioon?

Rekursioon on protsess, mille käigus määratletakse midagi iseenesest.

Füüsilise maailma näide oleks asetada kaks paralleelset peeglit üksteise poole. Kõik nende vahel olevad objektid kajastuksid rekursiivselt.

Pythoni rekursiivne funktsioon

Pythonis teame, et funktsioon võib kutsuda muid funktsioone. Funktsioonil on isegi võimalik ennast kutsuda. Seda tüüpi konstruktsioone nimetatakse rekursiivseteks funktsioonideks.

Järgmine pilt näitab rekursiivse funktsiooni toimimist recurse.

Rekursiivne funktsioon Pythonis

Järgnev on rekursiivse funktsiooni näide täisarvu faktori leidmiseks.

Arvu faktoriaal on kõigi täisarvude korrutis 1-st kuni selle arvuni. Näiteks faktor 6 (tähistatud kui 6!) On 1 * 2 * 3 * 4 * 5 * 6 = 720.

Rekursiivse funktsiooni näide

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

Väljund

 3 faktorial on 6

Ülaltoodud näites factorial()on see rekursiivne funktsioon, nagu ta ennast nimetab.

Kui nimetame seda funktsiooni positiivse täisarvuga, kutsub see ennast rekursiivselt arvu vähendades.

Iga funktsioon korrutab numbri selle all oleva arvu faktoriaaliga, kuni see on võrdne ühega. Seda rekursiivset kõnet saab selgitada järgmiste sammudega.

 faktoriaal (3) # esimene kõne 3 3 * faktooriga (2) # teine ​​kõne 2-ga 3 * 2 * faktoor (1) # kolmas kõne 1 3 * 2 * 1 # -ga naasmine 3. kõnelt numbrina = 1 3 * 2 # tagasipöördumine 2. kõnelt 6 # tagasipöördumine 1. kõnelt

Vaatame pilti, mis näitab toimuva järkjärgulist protsessi:

Rekursiivse faktoriaalfunktsiooni töötamine

Meie rekursioon lõpeb, kui arv väheneb väärtuseni 1. Seda nimetatakse põhitingimuseks.

Igal rekursiivsel funktsioonil peab olema põhitingimus, mis peatab rekursiooni, vastasel juhul kutsub funktsioon ennast lõpmatuks.

Pythoni tõlk piirab rekursiooni sügavust, et vältida lõpmatuid rekursioone, mille tulemuseks on virna ülevool.

Vaikimisi on rekursiooni maksimaalne sügavus 1000. Kui piir ületatakse, on see tulemuseks RecursionError. Vaatame ühte sellist tingimust.

 def recursor(): recursor() recursor()

Väljund

 Jälgimine (viimane kõne viimati): fail "", rida 3, failis "", rida 2, failis "", rida 2, failis "", rida 2, fail "", rida 2, reas (eelmist rida korrati veel 996 korda ) RecursionError: rekursiooni maksimaalne sügavus on ületatud

Rekursiooni eelised

  1. Rekursiivsed funktsioonid muudavad koodi väljanägemise puhtaks ja elegantseks.
  2. Keerulise ülesande saab rekursiooni abil jagada lihtsamateks alamprobleemideks.
  3. Järjestuse genereerimine on rekursiooniga lihtsam kui mõne pesastatud iteratsiooni kasutamine.

Rekursiooni puudused

  1. Mõnikord on rekursiooni taga olevat loogikat raske järgida.
  2. Rekursiivsed kõned on kallid (ebaefektiivsed), kuna need võtavad palju mälu ja aega.
  3. Rekursiivseid funktsioone on raske siluda.

Huvitavad Artiklid...