Kaikki mitä sinun tarvitsee tietää Pythonin rekursiosta



Tämä artikkeli auttaa sinua saamaan yksityiskohtaisen ja kattavan tiedon rekursiosta Pythonissa. Kuinka se toimii? ja mikä on sen tarkoitus?

Yksinkertaisesti sanottuna rekursio on tapa ratkaista ongelma saamalla toimintokutsu itse, sana ' rekursiivinen ”On peräisin latinalaisesta verbistä” toistuvat ”, Mikä tarkoittaa tehdä jotain uudelleen. Tätä rekursiivinen toiminto tekee, se tekee saman saman uudelleen ja uudelleen, eli se muistuttaa itseään. Tässä artikkelissa opitaan rekursiosta pythonissa. Tässä blogissa käsitellään seuraavia aiheita:

Mikä on rekursio Pythonissa?

Rekursio on prosessi, jossa määritetään jotain itsestään. Tiedämme, että Pythonissa mikä tahansa toiminto voi kutsua mitä tahansa muuta toimintoa, toiminto voi myös kutsua itseään. Tämän tyyppisiä toimintoja, jotka kutsuvat itseään, kunnes tietty ehto ei täyty, kutsutaan rekursiivisiksi funktioiksi.





Recursion-in-Python

Otetaan muutama esimerkki nähdäksesi, miten se toimii. Jos sinulle annetaan positiivinen kokonaisluku n, tekijä olisi.



  • n! = n * (n-1) * (n-2) ja niin edelleen.
  • 2! = 2 * (2-1)
  • yksi! = 1
  • 0! = 0
  • 4! = 4 * 3!
  • 3! = 3 * 2!
  • 2! = 2 * 1!

Yllä olevien arvojen korvaaminen johtaa seuraavaan lausekkeeseen

  • 4! = 4 * 3 * 2 * 1

Meidän on määriteltävä funktio, jonka avulla voidaan sanoa tosiasia (n), joka ottaa parametriksi positiivisen kokonaisluvun tai 0 ja palauttaa n: nnen kertoimen. Kuinka voimme tehdä sen käyttämällä rekursiota?

Katsotaanpa, jotta voimme tehdä sen käyttämällä rekursiota, meidän on tutkittava seuraava yhtälö



  • n! = n. (n-1). (n-2) & helvetti 3.2.1

  • n! = n. (n-1)! # voimme kirjoittaa yllä olevan lausekkeen uudestaan ​​kuten tällä rivillä

  • Nyt täällä, jos välitämme 2 parametrina, saamme:

    • 2! = 2,1! = 2

  • Vastaavasti, jos ohitamme yhden, saamme:

    mikä on pojo java
    • yksi! = 1,0! = 1

  • Mutta jos ohitamme 0, se hajoaa

    • 0! = 0. (- 1)! ja tässä kerrointa -1 ei ole määritelty, joten tämä toimii vain arvojen> 0 suhteen

  • Joten meidän on kirjoitettava kaksi tapausta

    • 1. n! = n. (n-1)! jos n> = 1

    • 2. 1 jos n = 0

Tämä on täydellinen ratkaisu kaikille positiivisille kokonaisluvuille ja 0: lle.

mikä on kaikua php: ssä

Irtisanominen

Rekursiivisen toiminnon on täytettävä tärkeä ehto lopettaa. Siirtyminen kohti tilaa, jossa ongelma voidaan ratkaista ilman lisärekursiota, rekursiivinen toiminto lopetetaan ja minimoidaan ongelma pienempiin alavaiheisiin. Rekursio voi päätyä äärettömään silmukkaan, jos lopetusehto ei täyty puheluissa.

Faktorialueet:

  • kerroin n = n * (n-1), kunhan n on suurempi kuin 1.
  • 1, jos n = 0

Muunamme yllä olevat tekijäolosuhteet python-koodissa:

def fact (n): jos n == 1: return n else: return n * fact (n-1)

Otetaan esimerkki, sanotaan haluavamme löytää 4: n kerroin:

tosiasia (4) #tämä palauttaa 4 * tosiasian (3) ja niin edelleen, kunnes n == 1.
 Tuotos: 24

Sitä käytetään niin usein esimerkkinä rekursiosta yksinkertaisuuden ja selkeyden vuoksi. Pienempien ongelmatilanteiden ratkaiseminen kussakin vaiheessa, jota se kutsui rekursioksi tietojenkäsittelytieteessä.

Pythonin rekursioraja

Joillakin kielillä voit luoda loputtoman rekursiivisen silmukan, mutta Pythonissa on rekursioraja. Tarkista raja suorittamalla seuraava toiminto sys-moduulista. joka antaa pythonille asetetun rekursiorajan.

tuo sys sys.getrecursionlimit ()
 Tuotos: 1000

Voit myös muuttaa rajaa käyttämällä sys-moduulin funktioitaetrecursionlimit () vaatimuksesi mukaan. Luodaan nyt funktio, joka kutsuu itseään rekursiivisesti, kunnes se ylittää rajan ja tarkistaa mitä tapahtuu:

def rekursiivinen (): rekursiivinen () jos __nimi__ == '__main__': rekursiivinen ()

Jos suoritat yllä olevan koodin, saat ajonaikaisen poikkeuksen: RuntimeError: suurin rekursiosyvyys ylitetty. Python estää sinua luomasta toimintoa, joka pääsee loputtomaan rekursiiviseen silmukkaan.

Tasoittuvat luettelot rekursiolla

Muita asioita, joita voit tehdä rekursiolla, lukuun ottamatta faktoria, sanotaan, että haluat luoda yhden luettelosta, joka on sisäkkäin, se voidaan tehdä alla olevalla koodilla:

def tasaa (a_list, flat_list = none): jos flat_list ei ole: flat_list = [] kohteelle a_list: jos isinstance (item, list): litistä (item, flat_list) else: flat_list.append (item) palauta flat_list jos __name__ == '__main__': sisäkkäin = [1,2,3, [4,5], 6] x = litistä (sisäkkäinen) tulosta (x)
 Tuotos: [1,2,3,4,5,6]

Yllä olevan koodin suorittaminen johtaa yhteen luetteloon kokonaislukulistan sijaan, joka sisältää kokonaislistan, jota käytimme syötteenä. Voit tehdä saman myös muilla tavoilla, Pythonilla on jotain nimeltään itertools.chain (). Voit tarkistaa toimintoketjun luomiseen käytetyn koodin (). Se on erilainen tapa tehdä sama asia kuin me.

Rekursioedut

  • Koodi on puhdas ja tyylikäs rekursiivisessa toiminnossa.

  • Yhdistetty tehtävä voidaan jakaa yksinkertaisempiin alaongelmiin rekursiota käyttämällä.

  • Sekvenssin luominen on helpompaa rekursiolla kuin sisäkkäisen iteraation käyttäminen.

    kuinka käyttää goto c ++: ta

Rekursioiden haitat

  • Rekursiivisen toiminnon takana olevan logiikan noudattaminen voi olla joskus vaikeaa.

  • Rekursiiviset puhelut ovat kalliita (tehoton), koska ne vievät paljon muistia ja aikaa.

  • Rekursiivisia toimintoja on vaikea korjata.

Tässä artikkelissa näimme, mikä on rekursio ja miten voimme kehittää rekursiivisia funktioita ongelmalausekkeesta, kuinka matemaattisesti ongelmalauseke voidaan määritellä. Ratkaisimme faktorialan ongelman ja selvitimme olosuhteet, joita tarvitaan sellaisten faktorialien löytämiseen, joista pystyimme muuntamaan kyseiset olosuhteet python-koodiksi, mikä antaa sinulle käsityksen rekurion toiminnasta. Mielestäni on siistiä, että Pythonissa on sisäänrakennettu rekursioraja, jotta kehittäjät eivät voi luoda huonosti rakennettuja rekursiivisia toimintoja. Yksi tärkeä asia on huomata, että rekursiota on vaikea selvittää, koska toiminto kutsuu itseään.