Све што треба да знате о рекурзији у Питхону



Овај чланак ће вам помоћи да стекнете детаљно и свеобухватно знање о рекурзији у Питхону. Како то ради? и која је његова сврха?

Једноставним речима, рекурзија је начин решавања проблема тако што се сам позив функције, реч „ рекурзивно “Потиче од латинског глагола„ поновити ”, Што значи преправити нешто. То ради рекурзивна функција, понавља исту ствар изнова и изнова, тј. Подсећа на себе. У овом чланку ћемо научити о рекурзији у питхону. Следе теме обрађене на овом блогу:

Шта је рекурзија у Питхону?

Рекурзија је поступак одређивања нечега у смислу самог себе. Знамо да у Питхону свака функција може позвати било коју другу функцију, функција такође може позвати себе. Ове врсте функција које себе називају док одређени услов није испуњен називају се рекурзивним функцијама.





Recursion-in-Python

добити дужину низа јс

узмимо неколико примера да видимо како то функционише. Ако вам се да позитивни цели број н, факторијел би био.



  • н! = н * (н-1) * (н-2) и тако даље.
  • 2! = 2 * (2-1)
  • један! = 1
  • 0! = 0
  • 4! = 4 * 3!
  • 3! = 3 * 2!
  • 2! = 2 * 1!

Замена горњих вредности резултираће следећим изразом

  • 4! = 4 * 3 * 2 * 1

Морамо дефинисати функцију која дозвољава рец фацт (н) која узима позитивни цели број или 0 као свој параметар и враћа н-ти факторијел, како то можемо учинити помоћу рекурзије?

Да видимо, да бисмо то урадили помоћу рекурзије, морамо испитати следећу једначину



  • н! = н. (н-1). (н-2) & хеллип3.2.1

  • н! = н. (н-1)! # горњу изјаву можемо преписати као у овом реду

  • Сада овде ако проследимо 2 као параметар добићемо:

    • 2! = 2.1! = 2

  • Слично томе, ако прођемо 1, добићемо:

  • Али ако прођемо 0, пукне

    • 0! = 0. (- 1)! а овде факторијел за -1 није дефинисан, па ово ради само за вредности> 0

  • Дакле, морамо написати два случаја

    • 1. н! = н. (н-1)! ако је н> = 1

    • 2. 1 ако је н = 0

Ово је комплетно решење за све позитивне целе бројеве и 0.

Услов престанка

Рекурзивна функција мора испунити важан услов за завршетак. Крећући се ка стању у којем се проблем може решити без даље рекурзије, рекурзивна функција ће се завршити, умањујући проблем на мање поткораке. Рекурзија може завршити у бесконачној петљи ако услов прекида није задовољен у позивима.

Факторски услови:

  • факторијел од н = н * (н-1) све док је н веће од 1.
  • 1 ако је н = 0

Претворићемо горње факторске услове у питхон код:

деф фацт (н): иф н == 1: ретурн н елсе: ретурн н * фацт (н-1)

Узмимо пример, рецимо да желимо пронаћи фактор од 4:

фацт (4) # ово ће вратити чињеницу 4 * (3) и тако даље док н == 1.
 Излаз: 24

Толико се често користи као пример за рекурзију због своје једноставности и јасноће. Решавање мањих примера проблема у сваком кораку који је у рачунарској науци назвао рекурзијом.

Питхон'с Рецурсион Лимит

У неким језицима можете створити бесконачну рекурзивну петљу, али у Питхону постоји ограничење рекурзије. Да бисте проверили ограничење, покрените следећу функцију из сис модула. што ће дати границу рекурзијског скупа за питхон.

импорт сис сис.гетрецурсионлимит ()
 Излаз: 1000

Такође можете да промените ограничење помоћу функцијесетрецурсионлимит () модула сис у складу са вашим захтевом. Хајде сада да креирамо функцију која се позива рекурзивно док не прекорачи ограничење и проверава шта се догађа:

деф рекурзивно (): рекурзивно () ако је __наме__ == '__маин__': рекурзивно ()

Ако покренете горњи код, добићете изузетак током извођења: РунтимеЕррор: премашена је максимална дубина рекурзије. Питхон вас спречава да креирате функцију која завршава у бесконачној рекурзивној петљи.

Поравнавање листа са рекурзијом

Остале ствари које можете да радите помоћу рекурзије, осим фактора, рецимо да желите да направите сингл са угнежђене листе, то се може урадити помоћу доњег кода:

деф поравнати (а_лист, флат_лист = ноне): ако флат_лист није ништа: флат_лист = [] за ставку на а_лист: иф исинстанце (итем, лист): флаттен (итем, флат_лист) елсе: флат_лист.аппенд (итем) ретурн флат_лист иф __наме__ == '__маин__': угнежђено = [1,2,3, [4,5], 6] к = поравнај (угнезди) испис (к)
 Излаз: [1,2,3,4,5,6]

Покретање горњег кода резултираће једном листом уместо целобројне листе која садржи целобројну листу коју смо користили као улаз. Такође можете учинити исту ствар и на друге начине, Питхон има нешто што се зове итертоолс.цхаин (). Можете проверити код који се користи за креирање ланца функција (). Другачији је приступ радити исту ствар као и ми.

како се користе овлашћења у јави

Предности рекурзије

  • Код је чист и елегантан у рекурзивној функцији.

  • Композитни задатак се може разбити на једноставније под-проблеме помоћу рекурзије.

  • Генерирање секвенце је лакше са рекурзијом него коришћење неке угнежђене итерације.

Мане рекурзије

  • Следити логику која стоји иза рекурзивне функције понекад може бити тешко.

  • Рекурзивни позиви су скупи (неефикасни) јер заузимају пуно меморије и времена.

  • Тешко је отклонити грешке у рекурзивним функцијама.

У овом чланку смо видели шта је рекурзија и како можемо да развијемо рекурзивне функције из исказа проблема, како математички може да се дефинише исказ проблема. Решили смо проблем са факторијелом и пронашли услове потребне за проналазак фактора из којих смо успели да претворимо те услове у питхон код дајући вам разумевање како рекурзија функционише. Мислим да је лепо што Питхон има уграђено ограничење за рекурзију како би спречио програмере да креирају лоше конструисане рекурзивне функције. Једна важна ствар коју треба приметити је да је рекурзију тешко отклонити грешке јер функција наставља да се позива.