Мазмунга өтүү

Рекурсивдүү ойлонуу: Python’догу рекурсия

Сабактын башталышы

Рекурсивдүү ойлонуу: Python'догу рекурсия

Маселени өзүнүн кичирейтилген көчүрмөсүн чакырып чечкен функция

Негизги идея: Рекурсивдүү функция маселени ошол эле маселенин кичине версиясына бөлүп, ал кичине версияны өзүн чакыруу менен чечип, натыйжаны бириктирип чечет. Ар бир рекурсияга эки бөлүк керек: түшүүнү токтоткон базалык учур жана базалык учурга бир кадам жакындаткан рекурсивдүү учур. Эки бөлүктүн бирин туура эмес жазсаңыз, функция эч качан бүтпөйт.
Аягында сиз төмөнкүлөрдү жасай аласыз:
  • рекурсияга аныктама берип, базалык учур менен рекурсивдүү учурду ажырата билесиз,
  • рекурсивдүү чакырууда чакыруу стеги кантип өсүп, кайра ачылганын изилдей аласыз,
  • классикалык рекурсияларды жаза аласыз: факториал, Фибоначчи, тизменин суммасы жана каталогдорду кыдыруу,
  • рекурсия циклден качан жакшыраак окулаарын, качан цикл коопсузураак экенин чече аласыз,
  • Python'дун рекурсия чегин түшүндүрүп, терең рекурсия эмне үчүн RecursionError чыгарарын билесиз.

1. Рекурсия деген эмне

Сиз мурунтан эле башка функцияларды чакырган функцияларды жазасыз. Рекурсия — бул жөн эле өзүн чакырган функция. Бул тегерек сыяктуу угулат, жана ошондой болмок, эгер ар бир чакыруу маселенин кичине бөлүгүндө иштебесе — бөлүк ушунчалык кичине болуп, жооп ачык-айкын болгонго чейин жана жаңы чакыруу керек эместигине чейин.

Өзү аркылуу аныкталган маселени элестетиңиз. «n факториалы — бул n көбөйтүлгөн n - 1 факториалы». Бул сүйлөм чоң маселени (n факториалы) кичине маселе (n - 1 факториалы) аркылуу сүрөттөйт. Рекурсия бул өзүнө шилтеме кылган сүрөттөмөнү түз кодго айландырат.

def factorial(n):
    if n == 0:            # базалык учур: көбөйтө турган эч нерсе калган жок
        return 1
    return n * factorial(n - 1)   # рекурсивдүү учур: кичине маселе

print(factorial(4))   # 24

Акыркы сапта функция өзүнө шилтеме кылат. Цикл жок, бирок ал 4 * 3 * 2 * 1 көбөйтөт. Сыры — ар бир чакыруу өзүнүн көбөйтүүсүн жасоодон мурун кичине чакыруунун бүтүшүн күтөт.

Бул сабакты YourAIZone платформасында улантыңыз

Толук сабакта — толук түшүндүрмө, чыгарылган мисалдар, көп кездешкен каталар, заматта текшерилүүчү тесттер жана ЖИ-репетитор. Конок катары дароо баштаңыз же прогрессти сактоо үчүн аккаунт түзүңүз.

Толук сабакта

  • Толук түшүндүрмө
  • Чыгарылган мисалдар
  • Көп кездешкен каталар жана алардан кантип качуу керек
  • Тест суроолору: 15
  • Тема боюнча суроолорго жооп берген ЖИ-репетитор
  • Окуучу, ата-эне жана мугалим үчүн прогрессти көзөмөлдөө