Viskas, ką reikia žinoti apie „Recursion In Python“



Šis straipsnis padės jums gauti išsamių ir išsamių žinių apie rekursiją „Python“. Kaip tai veikia? o koks jo tikslas?

Paprastais žodžiais tariant, rekursija yra būdas išspręsti problemą, kai pati funkcija iškviečiama. rekursinis “Kilęs iš lotyniškojo veiksmažodžio„ pasikartoti “, O tai reiškia kažką perdaryti. Tai daro rekursinė funkcija, ji vėl ir vėl perdaro tą patį dalyką, t.y., pati save primena. Šiame straipsnyje mes sužinosime apie rekursiją pitone. Toliau pateikiamos šio tinklaraščio temos:

Kas yra rekursija „Python“?

Rekursija yra procesas, kai kažkas nustatoma pagal save. Mes žinome, kad „Python“ bet kuri funkcija gali iškviesti bet kurią kitą funkciją, funkcija taip pat gali vadinti save. Šie funkcijų tipai, kurie vadinasi, kol neįvykdoma tam tikra sąlyga, vadinami rekursinėmis funkcijomis.





Recursion-in-Python

Paimkime keletą pavyzdžių, kad pamatytume, kaip tai veikia. Jei jums suteiktas teigiamas sveikasis skaičius n, faktorius būtų.



  • n! = n * (n-1) * (n-2) ir pan.
  • 2! = 2 * (2-1)
  • vienas! = 1
  • 0! = 0
  • 4! = 4 * 3!
  • 3! = 3 * 2!
  • 2! = 2 * 1!

Pakeitus aukščiau pateiktas reikšmes, bus pateikta ši išraiška

  • 4! = 4 * 3 * 2 * 1

Turime apibrėžti funkciją, kuri leidžia pasakyti faktą (n), kurio parametru laikomas teigiamas sveikasis skaičius arba 0 ir pateikiamas n-tasis faktorius, kaip mes galime tai padaryti naudodami rekursiją?

kaip rasti masyvo ilgį javascript

Pažiūrėkime, kad tai padarytume naudodami rekursiją, turime ištirti šią lygtį



  • n! = n. (n-1). (n-2) ir pragaras3.2.1

  • n! = n. (n-1)! # mes galime perrašyti aukščiau pateiktą teiginį kaip šioje eilutėje

  • Dabar čia, jei perduosime 2 kaip parametrą, gausime:

    • 2! = 2,1! = 2

  • Panašiai, jei išlaikysime 1, gausime:

    • vienas! = 1,0! = 1

  • Bet jei mes praleidžiame 0, jis lūžta

    • 0! = 0. (- 1)! o čia koeficientas -1 nėra apibrėžtas, todėl tai veikia tik tada, kai reikšmės> 0

  • Taigi turime parašyti du atvejus

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

    • 2. 1, jei n = 0

Tai yra išsamus visų teigiamų sveikųjų skaičių ir 0 sprendimas.

kas yra antrosios pakopos pažymėjimas

Nutraukimo sąlyga

Rekursinė funkcija turi įvykdyti svarbią nutraukimo sąlygą. Judant link būklės, kai problemą galima išspręsti be papildomo rekurso, rekursinė funkcija bus nutraukta, sumažinant problemą mažesniuose pakopose. Rekursija gali baigtis begaline kilpa, jei skambučiuose nebus įvykdyta nutraukimo sąlyga.

Faktorinės sąlygos:

  • n = n * (n-1) faktorius, jei n yra didesnis nei 1.
  • 1, jei n = 0

Mes konvertuosime aukščiau nurodytas faktoriaus sąlygas pitono kode:

def faktas (n): jei n == 1: grąžinti dar n: grąžinti n * faktą (n-1)

Paimkime pavyzdį, tarkime, kad norime rasti faktorių iš 4:

faktas (4) # tai grąžins 4 * faktą (3) ir t. t., kol n == 1.
 Išvestis: 24

Dėl savo paprastumo ir aiškumo jis dažnai naudojamas kaip rekurso pavyzdys. Mažesnių problemos egzempliorių sprendimas kiekviename žingsnyje tai vadinama rekursija kompiuterių moksle.

„Python’s Recursion Limit“

Kai kuriomis kalbomis galite sukurti begalinę rekursišką kilpą, tačiau „Python“ yra rekursijos riba. Norėdami patikrinti ribą, paleiskite šią funkciją iš „sys“ modulio. kuris suteiks pitonui nustatytos rekursijos ribą.

importuoti sys sys.getrecursionlimit ()
 Išvestis: 1000

Ribą taip pat galite pakeisti naudodamiesi „sys“ modulio funkcijomisetrecursionlimit () pagal savo reikalavimą. Dabar sukurkime funkciją, kuri pasikviečia rekursyviai, kol viršija ribą ir patikrina, kas vyksta:

perduoti nuorodą java
def recursive (): rekursyvus () if __name__ == '__main__': rekursyvus ()

Jei paleisite pirmiau nurodytą kodą, gausite vykdymo laiko išimtį: RuntimeError: viršytas didžiausias rekursijos gylis. „Python“ neleidžia jums sukurti funkcijos, kuri baigiasi nesibaigiančia rekursine kilpa.

Išlyginti sąrašai su rekursija

Kiti dalykai, kuriuos galite padaryti naudodami rekursiją, išskyrus faktorius, tarkime, kad norite sukurti vieną iš įdėto sąrašo, tai galite padaryti naudodami toliau pateiktą kodą:

def išlyginti (a_list, flat_list = none): jei buto_list nėra == '__main__': įdėta = [1,2,3, [4,5], 6] x = išlyginti (įdėta) spausdinti (x)
 Išvestis: [1,2,3,4,5,6]

Paleidus aukščiau nurodytą kodą, bus gautas vienas sąrašas, o ne sveikųjų skaičių sąrašas, kuriame yra sveikųjų skaičių sąrašas, kurį naudojome kaip įvestį. Taip pat galite padaryti tą patį naudodami kitus būdus, „Python“ turi kažką vadinamo itertools.chain (), galite patikrinti kodą, naudojamą funkcijų grandinei sukurti (), tai yra kitoks požiūris daryti tą patį, ką ir mes.

Rekursijos privalumai

  • Rekursine funkcija kodas yra švarus ir elegantiškas.

  • Sudėtinę užduotį galima suskirstyti į paprastesnes sub-problemas naudojant rekursiją.

  • Rekursija generuoti seką yra lengviau nei naudojant kai kurias įdėtas iteracijas.

Rekursijos trūkumai

  • Kartais gali būti sunku vadovautis rekursinės funkcijos logika.

  • Rekursiniai skambučiai yra brangūs (neefektyvūs), nes užima daug atminties ir laiko.

  • Rekursines funkcijas sunku derinti.

Šiame straipsnyje mes pamatėme, kas yra rekursija ir kaip mes galime sukurti rekursines funkcijas iš problemos teiginio, kaip matematiškai galima apibrėžti problemos teiginį. Mes išsprendėme faktorialo problemą ir išsiaiškinome sąlygas, reikalingas norint rasti faktorialus, iš kurių galėjome konvertuoti šias sąlygas į pitono kodą, suteikdami jums supratimą apie tai, kaip veikia rekursija. Manau, kad tvarkinga, kad „Python“ turi įmontuotą rekurso ribą, kad kūrėjai negalėtų kurti blogai sukonstruotų rekursiškų funkcijų. Svarbus dalykas, kurį reikia pastebėti, yra tai, kad rekursiją sunku derinti, nes funkcija vis save vadina.