πŸ” Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ рСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅: ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅

РСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° самих сСбя Π²Π½ΡƒΡ‚Ρ€ΠΈ своСго Ρ‚Π΅Π»Π°. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° числа:


def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ функция "factorial" Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ саму сСбя с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½Π½Ρ‹ΠΌ Π½Π° 1, Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅ станСт Ρ€Π°Π²Π½Ρ‹ΠΌ 0. Когда это происходит, функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1. Π—Π°Ρ‚Π΅ΠΌ, ΠΏΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ умноТаСтся Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. Π’ ΠΈΡ‚ΠΎΠ³Π΅, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» исходного числа.

РСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ΠΌΠΈ, Π½ΠΎ ΠΈΡ… слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ. НСкоррСктно оформлСнная рСкурсия ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ бСсконСчному Ρ†ΠΈΠΊΠ»Ρƒ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π² вашСй рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ случай, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ, ΠΈ Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ рСкурсивноС Π²Ρ‹Π·ΠΎΠ²Ρ‹ продвигаСтся ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ ΡΠ»ΡƒΡ‡Π°ΡŽ.

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ рСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅

РСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π°ΠΆΠ½Ρ‹ΠΌ инструмСнтом Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° языкС Python. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ сами сСбя, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассмотрим, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ рСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ рСкурсивных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

РСкурсивная функция - это функция, которая Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ саму сСбя Π²Π½ΡƒΡ‚Ρ€ΠΈ своСго Ρ‚Π΅Π»Π°. Вакая конструкция называСтся "рСкурсиСй". Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ простой рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python:


def countdown(n):
    if n <= 0:
        print("Π“ΠΎΡ‚ΠΎΠ²ΠΎ!")
    else:
        print(n)
        countdown(n - 1)
  

Π Π°Π·Π±ΠΎΡ€ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ шагам:

  1. Ѐункция countdown() ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ n.
  2. Если n мСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ, функция ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ "Π“ΠΎΡ‚ΠΎΠ²ΠΎ!" ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ.
  3. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, функция ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ n ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сСбя с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ n-1.
  4. Π­Ρ‚ΠΎΡ‚ процСсс повторяСтся, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнуто условиС Π²Ρ‹Ρ…ΠΎΠ΄Π° (n <= 0).

РСкурсия Π² дСйствии

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ countdown() с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ 5 ΠΈ посмотрим, ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:


countdown(5)
  

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния этого ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½Ρ‹ числа ΠΎΡ‚ 5 Π΄ΠΎ 1, Π° Π·Π°Ρ‚Π΅ΠΌ строка "Π“ΠΎΡ‚ΠΎΠ²ΠΎ!". Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит Π²Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

5
4
3
2
1
Π“ΠΎΡ‚ΠΎΠ²ΠΎ!
  

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ рСкурсивных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с рСкурсивными функциями Π²Π°ΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ нСсколько Π²Π΅Ρ‰Π΅ΠΉ:

  • ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ создаСт Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ контСкстом выполнСния.
  • РСкурсивная функция Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ условиС Π²Ρ‹Ρ…ΠΎΠ΄Π° (base case), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ бСсконСчноС рСкурсивноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.
  • РСкурсивная функция Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΎΠ³Ρ€Π΅ΡΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС, ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΡŽ.
  • ΠžΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ ΠΊ рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π½Π΅ застряла Π² бСсконСчной рСкурсии.

Π—Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ?

РСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… случаях:

  • РСшСниС Π·Π°Π΄Π°Ρ‡, основанных Π½Π° Π·Π°Π΄Π°Ρ‡Π΅ разбиСния Π½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠ»ΠΈ рСкурсивного поиска.
  • ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π΄Π΅Ρ€Π΅Π²ΡŒΡ ΠΈΠ»ΠΈ Π³Ρ€Π°Ρ„Ρ‹.
  • ВычислСниС матСматичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠ½Π΄ΡƒΠΊΡ‚ΠΈΠ²Π½ΠΎ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

РСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ разбиСния Π½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ рСкурсивного ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ. Они ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° языкС Python. Однако, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ остороТно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ бСсконСчной рСкурсии. НадСюсь, этот ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΏΠΎΠΌΠΎΠ³ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ рСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python!

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

41 РСкурсия Π² Python. РСкурсивная функция Π§Π°ΡΡ‚ΡŒ 1

#41. РСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ | Python для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

Python Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. РСкурсия

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ iter Π² Python? 🐍 Π£Π·Π½Π°ΠΉΡ‚Π΅ всС ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ iter ΠΈ Π΅Π΅ использовании Π² Python

πŸ“š Как ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Python Π½Π° Mac: пошаговая инструкция с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ

Как Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅?

πŸ” Как Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ рСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅: ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅

Как выглядит ΠΊΠΎΠ΄ сайта Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅? 😎✍️

Как ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ словаря ΠΏΠΈΡ‚ΠΎΠ½Π°? πŸ“šβœ¨ ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ способ расчСта!

πŸ”Œ Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ LaTeX Π² Python: пошаговоС руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ