Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии

PostgreSQL Antipatterns: Β«Π‘Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ β€” Π½Π΅ ΠΏΡ€Π΅Π΄Π΅Π»!Β», ΠΈΠ»ΠΈ НСмного ΠΎ рСкурсии

РСкурсия β€” ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, Ссли Π½Π°Π΄ связанными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ дСйствия Β«Π²Π³Π»ΡƒΠ±ΡŒΒ». Но нСконтролируСмая рСкурсия β€” Π·Π»ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΊ бСсконСчному Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ процСсса, ΠΈΠ»ΠΈ (Ρ‡Ρ‚ΠΎ случаСтся Ρ‡Π°Ρ‰Π΅) ΠΊ Β«Π²Ρ‹ΠΆΠΈΡ€Π°Π½ΠΈΡŽΒ» всСй доступной памяти.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии

Π‘Π£Π‘Π” Π² этом ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ β€” «ΡΠΊΠ°Π·Π°Π»ΠΈ ΠΊΠΎΠΏΠ°Ρ‚ΡŒ, я ΠΈ копаю«. Π’Π°Ρˆ запрос ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ сосСдниС процСссы, постоянно занимая рСсурсы процСссора, Π½ΠΎ ΠΈ Β«ΡƒΡ€ΠΎΠ½ΠΈΡ‚ΡŒΒ» всю Π±Π°Π·Ρƒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, «съСв» всю Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ бСсконСчной рСкурсии β€” ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡ‚ΡŒ самого Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

Π’ PostgreSQL Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСкурсивныС запросы Ρ‡Π΅Ρ€Π΅Π· WITH RECURSIVE появилась Π΅Ρ‰Π΅ Π² нСзапамятныС Π²Ρ€Π΅ΠΌΠ΅Π½Π° вСрсии 8.4, Π½ΠΎ Π΄ΠΎ сих ΠΏΠΎΡ€ ΠΌΠΎΠΆΠ½ΠΎ рСгулярно Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ-уязвимыС Β«Π±Π΅Π·Π·Π°Ρ‰ΠΈΡ‚Π½Ρ‹Π΅Β» запросы. Как ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒ сСбя ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π°?

НС ΠΏΠΈΡΠ°Ρ‚ΡŒ рСкурсивныС запросы

А ΠΏΠΈΡΠ°Ρ‚ΡŒ нСрСкурсивныС. Π‘ ΡƒΠ²Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π’Π°Ρˆ К.О.

На самом Π΄Π΅Π»Π΅, PostgreSQL прСдоставляСт достаточно большоС количСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Π·Π°Π΄Π°Ρ‡Π΅

Иногда ΠΌΠΎΠΆΠ½ΠΎ просто Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° Π·Π°Π΄Π°Ρ‡Ρƒ «с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны». ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠΉ ситуации я ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ» Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Β«SQL HowTo: 1000 ΠΈ ΠΎΠ΄ΠΈΠ½ способ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈΒ» β€” ΠΏΠ΅Ρ€Π΅ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°Π±ΠΎΡ€Π° чисСл Π±Π΅Π· примСнСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

Π’Π°ΠΊΠΎΠΉ запрос ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΎΡ‚ Π·Π½Π°Ρ‚ΠΎΠΊΠΎΠ² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ generate_series вмСсто Ρ†ΠΈΠΊΠ»ΠΎΠ²

Допустим, ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ стоит Π·Π°Π΄Π°Ρ‡Π° ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ прСфиксы для строки ‘abcdefgh’ :

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ структуру Π‘Π”

НапримСр, Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π° сообщСний Ρ„ΠΎΡ€ΡƒΠΌΠ° со связями ΠΊΡ‚ΠΎ-ΠΊΠΎΠΌΡƒ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ» ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Π΄ Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ сСти:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии

Ну ΠΈ Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΉ запрос Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ всСх сообщСний ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π΅ΠΌΠ΅ выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Но Ρ€Π°Π· Ρƒ нас всСгда Π½ΡƒΠΆΠ½Π° вся Ρ‚Π΅ΠΌΠ° ΠΎΡ‚ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ сообщСния, Ρ‚ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π°ΠΌ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² ΠΊΠ°ΠΆΠ΄ΡƒΡŽ запись Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΎΠΌ?

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии

Π’Π΅ΠΏΠ΅Ρ€ΡŒ вСсь наш рСкурсивный запрос ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ свСдСн всСго лишь ΠΊ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΌΡƒ:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Π΅ Β«ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΠΈΒ»

Если ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ структуру Π±Π°Π·Ρ‹ ΠΌΡ‹ Π½Π΅ Π² силах ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Π½Π° Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠ΅Ρ€Π΅Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°ΠΆΠ΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ошибки Π² Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ бСсконСчному Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ рСкурсии.

Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ Β«Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹Β» рСкурсии

ΠŸΡ€ΠΎΡΡ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ счСтчик Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС рСкурсии Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° достиТСния ΠΏΡ€Π΅Π΄Π΅Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ считаСм Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ Π½Π΅Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½Ρ‹ΠΌ:

Pro: ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ зацикливания ΠΌΡ‹ всС Ρ€Π°Π²Π½ΠΎ сдСлаСм Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π»ΠΈΠΌΠΈΡ‚Π° ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Β«Π²Π³Π»ΡƒΠ±ΡŒΒ».
Contra: НСт Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ запись β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Π³Π»ΡƒΠ±ΠΈΠ½Π΅ 15 ΠΈ 25, Π½Ρƒ ΠΈ дальшС Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ +10. Π”Π° ΠΈ ΠΏΡ€ΠΎ Β«Π²ΡˆΠΈΡ€ΡŒΒ» Π½ΠΈΠΊΡ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΎΠ±Π΅Ρ‰Π°Π».

Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, такая рСкурсия Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ бСсконСчной, Π½ΠΎ Ссли Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС количСство записСй увСличиваСтся ΠΏΠΎ экспонСнтС, ΠΌΡ‹ всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°Π΅ΠΌ, Ρ‡Π΅ΠΌ это кончаСтся…

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии

Π₯Ρ€Π°Π½ΠΈΡ‚Π΅Π»ΡŒ Β«ΠΏΡƒΡ‚ΠΈΒ»

ΠŸΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ дописываСм всС Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΠ²ΡˆΠΈΠ΅ΡΡ Π½Π°ΠΌ ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ рСкурсии ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ Β«ΠΏΡƒΡ‚Π΅ΠΌΒ» Π΄ΠΎ Π½Π΅Π³ΠΎ:

Pro: ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° Π² Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΡ‹ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ станСм ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ запись Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ.
Contra: Но ΠΏΡ€ΠΈ этом ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ, Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ, всС записи, Ρ‚Π°ΠΊ ΠΈ Π½Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠ²ΡˆΠΈΡΡŒ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ ΠΏΡƒΡ‚ΠΈ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ситуации «блуТдания» рСкурсии Π½Π° нСпонятной Π³Π»ΡƒΠ±ΠΈΠ½Π΅, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Или, Ссли Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π»ΠΈΡˆΠ½ΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ условиС продолТСния рСкурсии ΠΎΡ†Π΅Π½ΠΊΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΠΏΡƒΡ‚ΠΈ:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΡΠ½ΠΎΠ²Ρ‹ программирования β€” Π²Ρ‚ΠΎΡ€ΠΎΠΉ сСмСстр 08-09; ΠœΠΈΡ…Π°Π»ΠΊΠΎΠ²ΠΈΡ‡ Π‘.Π‘.; III Ρ‡Π°ΡΡ‚ΡŒ

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

РСкурсия

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ опрСдСлСния

РСкурсиСй называСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ рСкурсивной Ρ‡Π°ΡΡ‚ΡŒΡŽ опрСдСлСния являСтся » ',' «.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ 1. РСкурсивноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ, опрСдСляСт бСсконСчноС мноТСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ:

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ (1) Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ лСворСкурсивным, Π° (2) β€” праворСкурсивным.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ 2. Π’ рСкурсивном ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ (. ) Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСрСкурсивная Ρ‡Π°ΡΡ‚ΡŒ.

РСкурсивноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ косвСнным:

ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π²Π΅Ρ‚Π²Π΅ΠΉ рСкурсивного опрСдСлСния упоминаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π²Π΅Ρ‚Π²Π΅ΠΉ опрСдСляСтся исходный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ имССтся ΠΊΠ°ΠΊ прямоС, Ρ‚Π°ΠΊ ΠΈ косвСнноС рСкурсивноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ΄ рСкурсиСй понимаСтся:

ΠŸΡ€ΠΈ косвСнной рСкурсии ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ использованиС ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°ΡŽΡ‰Π΅Π³ΠΎ объявлСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова forward:

ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования рСкурсии

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ этой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ рСкурсивноС Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΠ΅, Ρ‚.ΠΊ. рСкурсивный Π²Ρ‹Π·ΠΎΠ² производится бСзусловно.

Π’Ρ‹Π²ΠΎΠ΄. Π§Ρ‚ΠΎΠ±Ρ‹ рСкурсивного зацикливания Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, рСкурсивный Π²Ρ‹Π·ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ бСзусловно, Π° ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ всякий Ρ€Π°Π· мСняСтся ΠΈ ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ рСкурсивном Π²Ρ‹Π·ΠΎΠ²Π΅ становится Π»ΠΎΠΆΠ½Ρ‹ΠΌ (Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ условиС продолТСния рСкурсии).

Π˜ΡΠΏΡ€Π°Π²ΠΈΠΌ Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π² соотвСтствии со сдСланным Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ:

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ p(0) Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ:

ГрафичСски, рСкурсивныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ· самой сСбя называСтся рСкурсивным спуском.
ΠŸΡ€ΠΎΡ†Π΅ΡΡ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² называСтся рСкурсивным Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ числа выводятся Π½Π° рСкурсивном спускС (Ρ‚.Π΅. Π² прямом порядкС).
Однако, Ρ‡Ρ‚ΠΎΠ±Ρ‹ дСйствия Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡŒ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС, ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° рСкурсивном Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅.

Максимальная Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² называСтся Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ рСкурсии.
ВСкущая Π³Π»ΡƒΠ±ΠΈΠ½Π° называСтся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ рСкурсии.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π§Π΅ΠΌ большС Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии, Ρ‚Π΅ΠΌ большС Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы ΠΏΠΎ памяти.

ГрафичСскиС изобраТСния рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²

Одно графичСскоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρƒ нас ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ. Вспомним Π΅Π³ΠΎ:

Рассмотрим Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ Π²Ρ‹Π·ΠΎΠ² p(0) ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

Π’.ΠΎ. Π½Π° стСкС фактичСски хранятся всС значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ β€” ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ…ΠΎΠΉ.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ 2. НакладныС расходы Π½Π° ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π½Π° стСк ЗА, снятиС ЗА со стСка, Π° Ρ‚Π°ΠΊΠΆΠ΅ присваиваниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ Π½Π° стСкС достаточно Π²Π΅Π»ΠΈΠΊΠΈ.
ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли имССтся простоС нСрСкурсивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ (ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅), Ρ‚ΠΎ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ 3. Π›ΡŽΠ±ΡƒΡŽ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования рСкурсии

0 \\ 1, & n = 0 \end» src=»http://it.mmcs.sfedu.ru/_wiki/images/math/8/9/8/8989dd120bad0958c2d851101c298395.png» />

Π’ΠΎΠ³Π΄Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

Однако, Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ для n = 0)). Но Π΅Π³ΠΎ использованиС ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ рСкурсивном Π²Ρ‹Π·ΠΎΠ²Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ «ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ» Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

Π“Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ€Π°Π²Π½Π° n.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2. Найти Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π”Π°Π΄ΠΈΠΌ рСкурсивноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅:

0 \\ a a^, & \mboxn\mbox< is odd>, n > 0 \\ 1, & n = 0 \\ \frac<1>, & n

Π“Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии Ρ€Π°Π²Π½Π°:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3. НахоТдСниС минимального элСмСнта Π² массивС. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ этот элСмСнт ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ(ΠΎΠ΄ΠΈΠ½ элСмСнт, ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ· массива Π±Π΅Π· этого элСмСнта), Ρ‚.Π΅. рСкурсивноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π’ соотвСтствии с этим ΠΈΠΌΠ΅Π΅ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅:

Ясно, Ρ‡Ρ‚ΠΎ это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.
МоТно Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ, Ссли ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ срСди ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ€Π°Π²Π½Ρ‹Ρ… частСй массива. Π’.Π΅. Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒ массив ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ, Π½Π°ΠΉΡ‚ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΈ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΈΡ…. Поиск Π² ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ осущСствляСтся ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ производится Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π² подмассивС Π½Π΅ останСтся ΠΎΠ΄ΠΈΠ½ элСмСнт.
МоТно Π΅Ρ‰Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ β€” Ссли Π² подмассивС Π΄Π²Π° элСмСнта, достаточно Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ….
Π’Π΅ΠΏΠ΅Ρ€ΡŒ знания количСства элСмСнтов нСдостаточно: Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ, срСди ΠΊΠ°ΠΊΠΈΡ… элСмСнтов массива вСсти поиск. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π±ΡƒΠ΄Π΅ΠΌ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π»Π΅Π²ΡƒΡŽ (l) ΠΈ ΠΏΡ€Π°Π²ΡƒΡŽ (r) Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ подмассивов.
Π”Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΠΎΠ΅ рСкурсивноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅:

Π“Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ€Π°Π²Π½Π° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии(ΠΏΠΎ количСству Π΄Π΅Π»Π΅Π½ΠΈΠΉ).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4. Π’Ρ‹Π²ΠΎΠ΄ односвязного Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ списка Π½Π° экран.
Вспомним, ΠΊΠ°ΠΊ выглядит список:

РСкурсия называСтся ΠΊΠΎΠ½Ρ†Π΅Π²ΠΎΠΉ, Ссли рСкурсивный Π²Ρ‹Π·ΠΎΠ² являСтся послСдним Π² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

ΠšΠΎΠ½Ρ†Π΅Π²Π°Ρ рСкурсия Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΎ прСвращаСтся Π² ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ:

Π”ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠΌΠΎΡΡ‚ΠΈ рСкурсии

Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ рСкурсивной ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ Ρ†Π΅Π»Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ n:

Если ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ рСкурсивном Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ n ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π²Ρ‹Π·ΠΎΠ²Ρ‹

И Ссли рСкурсия Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈ n Π€ΠΎΡ€ΠΌΡ‹ рСкурсивных ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

1. ДСйствиС выполняСтся Π½Π° рСкурсивном спускС

2. ДСйствиС выполняСтся Π½Π° рСкурсивном Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅

3. ДСйствиС выполняСтся ΠΈ Π½Π° рСкурсивном спускС ΠΈ Π½Π° рСкурсивном Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅

4. Каскадная рСкурсия

Π­Ρ‚Π° рСкурсия называСтся каскадной, Ρ‚.ΠΊ. ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒ нСсколько рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² (каскад).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ рСкурсии слуТит функция АккСрмана:

0,\; n = 0; \\A(m-1,\;A(m,\;n-1)),& m > 0,\; n > 0.\end" src="http://it.mmcs.sfedu.ru/_wiki/images/math/f/8/2/f826ff51d40963b01fd8fee2dbe8ff0a.png" />

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ использования рСкурсии

Числа Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Π½Ρ‹ΠΌ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии

ΠœΡ‹ ΡƒΠΆΠ΅ вычисляли ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»ΠΎΠ². Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ рСкурсивноС (ΠΏΠ»ΠΎΡ…ΠΎΠ΅!) Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅:

Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Fib(7):

Π΄Π΅Ρ€Π΅Π²ΠΎ рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²

Как Π²ΠΈΠ΄ΠΈΠΌ, ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ числа Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΏΠΎ нСсколько Ρ€Π°Π·:

Алгоритм ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ, использовав массив, ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ нулями.
ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ вычислСнии fib(n) Π±ΡƒΠ΄Π΅ΠΌ Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт, Π° ΠΏΡ€ΠΈ всСх ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… β€” просто ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. Подобная ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° называСтся ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, Ρ‚.Π΅. Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΡ… ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ вычислСния.

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π΄Π°Π½Π½Ρ‹ΠΉ способ ΠΊΡ€Π°ΠΉΠ½Π΅ нСэффСктивСн ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ΠΊΠ°ΠΊ ΠΏΠΎ памяти, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π’ частности, Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии ΠΏΡ€ΠΈ вычислСнии n-Ρ‚ΠΎΠ³ΠΎ числа Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ составляСт n-1.

РСкурсивный способ вычислСния чисСл Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ, построСнный ΠΏΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ

Напомним ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска n-Ρ‚ΠΎΠ³ΠΎ числа Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ:

ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΠΌ ΠΏΠΎ Π½Π΅ΠΌΡƒ рСкурсивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, пСрСдавая Π² ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ a,b,c, ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°. ЀактичСски ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ рСкурсивном Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ подстановку:

РСкурсивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎ этой подстановкС, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄:

Π—Π°Π΄Π°Ρ‡Π° состоит Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ:
Π”Π°Π½Ρ‹ Ρ‚Ρ€ΠΈ стСрТня. На ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π»Π΅ΠΆΠ°Ρ‚ n дисков Ρ€Π°Π·Π½ΠΎΠ³ΠΎ радиуса ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ диск бОльшСго радиуса Π½Π΅ Π»Π΅ΠΆΠΈΡ‚ Π½Π° дискС ΠΌΠ•Π½ΡŒΡˆΠ΅Π³ΠΎ радиуса.
HΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ пСрСнСсти диски с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ стСрТня Π½Π° Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ, ΠΏΡ€ΠΈ условии:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии

ИдСя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° такая:

Π’.ΠΎ. ΠΈΠΌΠ΅Π΅ΠΌ простоС рСкурсивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅:

Быстрая сортировка

Алгоритм

Алгоритм быстрой сортировки (Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° «раздСляй ΠΈ влавствуй») состоит ΠΈΠ· Π΄Π²ΡƒΡ… этапов:
1. Π’Ρ‹Π±ΠΎΡ€ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ элСмСнта массива x ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ массива Π½Π° Π΄Π²Π΅ части Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ всС элСмСнты = x
2. РСкурсивноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ нашСго Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ частям

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌ быстрСС, Ρ‡Π΅ΠΌ Π½Π° Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π²Π½Ρ‹Π΅ части ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅Π»ΠΈΡ‚ΡŒ массив (Π² ΠΈΠ΄Π΅Π°Π»Π΅ β€” ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ).
ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡ‚Ρ€Π΅ΠΌΠΈΡ‚ΡŒΡΡ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ элСмСнт x Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° элСмСнтов массива Π±Ρ‹Π»Π° =. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π²Ρ‹Π±ΠΎΡ€ x Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π½Π΅ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ n β€” Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива).

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ способ Π²Ρ‹Π±ΠΎΡ€Π° x β€” Π² качСствС Π½Π΅Π³ΠΎ Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт.

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ прСдставлСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€ примСнСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° быстрой сортировки ΠΊ массиву

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии

Рассмотрим этап 1 ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅:
- Для раздСлСния массива Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ части Π·Π°Π²Π΅Π΄Π΅ΠΌ 2 индСкса i ΠΈ j.
- Π’ Π½Π°Ρ‡Π°Π»Π΅ i Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π²ΠΏΡ€Π°Π²ΠΎ, Π° j β€” Π½Π° послСдний ΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π²Π»Π΅Π²ΠΎ.

Π¨Π°Π³ 1.
Π‘ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒ i Π²ΠΏΠ΅Ρ€Π΅Π΄ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° A[i] Π½Π΅ станСт >= x.
Π”Π°Π»Π΅Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°Ρ‚ΡŒ j Π½Π°Π·Π°Π΄ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° A[j] Π½Π΅ станСт = j.
Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ массив A, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π° 2 части:

Код ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

АсимптотичСская ΠΎΡ†Π΅Π½ΠΊΠ° слоТности

Π‘ΡƒΠ΄Π΅ΠΌ ΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ массив всякий Ρ€Π°Π· дСлится Π½Π° 2 ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ части. Π­Ρ‚ΠΎ самый Π»ΡƒΡ‡ΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.
Π“Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии Π² этом случаС = log2n.

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ Partition ΠΌΡ‹ просматриваСм всС элСмСнты «своСй части» Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π’.Π΅. Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ рСкурсии Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ€Π°Π·Ρƒ просмотрСны всС элСмСнты массива.
Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ асимптотичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Partition Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ рСкурсии = Θ(n).

Π’.ΠΎ., ΠΏΡ€ΠΈ условии дСлСния ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ, асимптотичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ всСго Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° = Θ(n log n).

ВСорСтичСски Π΄ΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π² срСднСм, Ссли Π΄Π΅Π»ΠΈΠΌ Π½Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ, асимптотичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сохраняСт Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ Θ(n log n).
Вопрос: ΠΊΠ°ΠΊΠΎΠ²Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС? Π₯ΡƒΠ΄ΡˆΠΈΠΉ β€” ΠΊΠΎΠ³Π΄Π° Π² качСствС x Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ (ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ) элСмСнт. Π­Ρ‚ΠΎ происходит (Π² нашСй ситуации, Ρ‚.ΠΊ. ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт), Ссли массив ΡƒΠΆΠ΅ отсортирован.
Π’ этом случаС Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ разбиСния Π½Π° части большая Ρ‡Π°ΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ Π½Π° 1, ΠΈ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ Sort Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Π° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии.
ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС асимптотичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ = Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии.

Π£Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅. Для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ сущСствуСт Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° с асимптотичСской ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ Θ(n log n) Π² срСднСм.

ГСнСрация всСх пСрСстановок

Основная идСя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ всСх пСрСстановок Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ. Π’ массивС Π΄Π»ΠΈΠ½Ρ‹ n, содСрТащСм пСрСстановку, Π±ΡƒΠ΄Π΅ΠΌ ΠΌΠ΅Π½ΡΡ‚ΡŒ послСдний элСмСнт с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ, послС Ρ‡Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅ΠΌ рСкурсивно Π±ΡƒΠ΄Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС для массива Π΄Π»ΠΈΠ½Ρ‹ n-1 ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ пСрСставлСнный элСмСнт Π½Π° староС мСсто. Если достигнута Π΄Π»ΠΈΠ½Π° массива n=1, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Π° слСдуСт Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ содСрТимоС всСго массива-пСрСстановки Π½Π° экран. Π’Π°ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС пСрСстановки, Ρ‡Ρ‚ΠΎ слСдуСт ΠΈΠ· словСсного рСкурсивного опрСдСлСния: Π½Π° послСднСм мСстС ΠΏΠΎΠ±Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт, содСрТащийся Π² рассматриваСмом массивС, послС Ρ‡Π΅Π³ΠΎ ΠΊ ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части массива рСкурсивно Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ.

НСтрудно Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии составляСт n-1, Π° количСство Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Perm составляСт n!.

ГСнСрация всСх подмноТСств

ГСнСрация всСх подмноТСств прСдставляСт собой Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π°. Π’ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ всС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΈ для подходящих Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² выполняСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ дСйствиС. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС просто выводятся всС подмноТСства.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

РСкурсия ΠΈ стСк

ВСрнёмся ΠΊ функциям ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

НашСй ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚Π΅ΠΌΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ рСкурсия.

Если Π²Ρ‹ Π½Π΅ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с рСкурсиСй ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ эту Π³Π»Π°Π²Ρƒ.

РСкурсия – это ΠΏΡ€ΠΈΡ‘ΠΌ программирования, ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ Π² ситуациях, ΠΊΠΎΠ³Π΄Π° Π·Π°Π΄Π°Ρ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ СстСствСнно Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° нСсколько Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ…, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ простых Π·Π°Π΄Π°Ρ‡. Или ΠΊΠΎΠ³Π΄Π° Π·Π°Π΄Π°Ρ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π° Π΄ΠΎ нСслоТных дСйствий плюс простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ. Или, ΠΊΠ°ΠΊ ΠΌΡ‹ скоро ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ….

Π’ процСссС выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для выполнСния ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡. Частный случай ΠΏΠΎΠ΄Π²Ρ‹Π·ΠΎΠ²Π° – ΠΊΠΎΠ³Π΄Π° функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сама сСбя. Π­Ρ‚ΠΎ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ называСтся рСкурсиСй.

Π”Π²Π° способа ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ

Рассмотрим Π΄Π²Π° способа Π΅Ρ‘ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ способ: Ρ†ΠΈΠΊΠ» for :

РСкурсивный способ: ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ самой сСбя:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ рСкурсивный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ отличаСтся ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ.

Когда функция pow(x, n) вызываСтся, исполнСниС дСлится Π½Π° Π΄Π²Π΅ Π²Π΅Ρ‚Π²ΠΈ:

НапримСр, рСкурсивный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ вычислСния pow(2, 4) состоит ΠΈΠ· шагов:

Π˜Ρ‚Π°ΠΊ, Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° вычислСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ свСсти ΠΊ Π΅Ρ‘ Π±ΠΎΠ»Π΅Π΅ простому Π²Ρ‹Π·ΠΎΠ²Ρƒ, Π° Π΅Π³ΠΎ – ΠΊ Π΅Ρ‰Ρ‘ Π±ΠΎΠ»Π΅Π΅ простому ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, ΠΏΠΎΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ станСт ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ.

РСкурсивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠΎΡ€ΠΎΡ‡Π΅, Ρ‡Π΅ΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅.

Максимальная Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Π΄Π²ΠΈΠΆΠΊΠΎΠΌ JavaScript. Π’ΠΎΡ‡Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° 10000 Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΠΈ большС, Π½ΠΎ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΈΠ· Π½ΠΈΡ… 100000 Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² – Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ возмоТностСй. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ автоматичСскиС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ пСрСполнСния стСка Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² («оптимизация хвостовой рСкурсии»), Π½ΠΎ ΠΎΠ½ΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π²Π΅Π·Π΄Π΅ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для простых случаСв.

Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ рСкурсии, Π½ΠΎ ΠΎΠ½Π° всё Ρ€Π°Π²Π½ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ распространСна: для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ большого числа Π·Π°Π΄Π°Ρ‡ рСкурсивный способ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π΄Π°Ρ‘Ρ‚ Π±ΠΎΠ»Π΅Π΅ простой ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ.

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ выполнСния, стСк

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ посмотрим, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ рСкурсивныС Π²Ρ‹Π·ΠΎΠ²Ρ‹. Для этого заглянСм Β«ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚Β» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ процСссС выполнСния Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ хранится Π² Π΅Ρ‘ контСкстС выполнСния (execution context).

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ выполнСния – ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ внутрСнняя структура Π΄Π°Π½Π½Ρ‹Ρ…, которая содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Она Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ мСсто Π² ΠΊΠΎΠ΄Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this (ΠΌΡ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅) ΠΈ ΠΏΡ€ΠΎΡ‡ΡƒΡŽ ΡΠ»ΡƒΠΆΠ΅Π±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

Один Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ контСкст выполнСния, связанный с Π½ΠΈΠΌ.

Когда функция ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ², происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

pow(2, 3)

МоТно схСматичСски ΠΈΠ·ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ это Ρ‚Π°ΠΊ:

Π­Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π»ΠΎ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. УсловиС n == 1 Π»ΠΎΠΆΠ½ΠΎ, поэтому Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ΄Ρ‘Ρ‚ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ if :

ЗначСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π΅ ΠΆΠ΅ самыС, Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΎ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ строкС, Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ контСкст:

pow(2, 2)

Для выполнСния Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° JavaScript Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ контСкст выполнСния Π² стСкС контСкстов выполнСния.

Π’ΠΈΠ΄ контСкста Π² Π½Π°Ρ‡Π°Π»Π΅ выполнСния Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° pow(2, 2) :

Новый контСкст выполнСния находится Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка (ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ ΠΆΠΈΡ€Π½Ρ‹ΠΌ), Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ Π·Π°ΠΏΠΎΠΌΠ½Π΅Π½Π½Ρ‹Π΅ контСксты – ΠΏΠΎΠ΄ Π½ΠΈΠΌ.

Когда Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π²Ρ‹Π·ΠΎΠ²Π° закончится, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³ΠΊΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ Π½Π°Π·Π°Π΄, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ контСкст сохраняСт ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ мСсто ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ остановился. Π‘Π»ΠΎΠ²ΠΎ «строка» Π½Π° рисунках условно, Π½Π° самом Π΄Π΅Π»Π΅ запоминаСтся Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ мСсто Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄.

pow(2, 1)

Боздаётся Π½ΠΎΠ²Ρ‹ΠΉ контСкст выполнСния, ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ контСкст добавляСтся Π² стСк:

Π’Ρ‹Ρ…ΠΎΠ΄

Когда функция заканчиваСтся, контСкст Π΅Ρ‘ выполнСния большС Π½Π΅ Π½ΡƒΠΆΠ΅Π½, поэтому ΠΎΠ½ удаляСтся ΠΈΠ· памяти, Π° ΠΈΠ· стСка восстанавливаСтся ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ:

ВосстанавливаСтся контСкст ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°:

Π“Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии Π² Π΄Π°Π½Π½ΠΎΠΌ случаС составила 3.

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΉ Π²Ρ‹ΡˆΠ΅, Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии Ρ€Π°Π²Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ числу контСкстов, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… Π² стСкС.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° трСбования ΠΊ памяти. РСкурсия ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΡŽ всСх Π΄Π°Π½Π½Ρ‹Ρ… для Π½Π΅ΠΎΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹Ρ… Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² стСкС, ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ n Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² памяти n Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… контСкстов.

РСализация возвСдСния Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Ρ‡Π΅Ρ€Π΅Π· Ρ†ΠΈΠΊΠ» Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ экономна:

Π›ΡŽΠ±Π°Ρ рСкурсия ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Π½Π° Π² Ρ†ΠΈΠΊΠ». Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с Ρ†ΠΈΠΊΠ»ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ эффСктивнСС.

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

Часто ΠΊΠΎΠ΄ с использованиСм рСкурсии Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ, Π»Ρ‘Π³ΠΊΠΈΠΉ для понимания ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ трСбуСтся Π½Π΅ Π²Π΅Π·Π΄Π΅, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π°ΠΌ Π²Π°ΠΆΠ΅Π½ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΊΠΎΠ΄, поэтому ΠΎΠ½Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ.

РСкурсивныС ΠΎΠ±Ρ…ΠΎΠ΄Ρ‹

Π”Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ рСкурсии являСтся рСкурсивный ΠΎΠ±Ρ…ΠΎΠ΄.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρƒ нас Π΅ΡΡ‚ΡŒ компания. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° пСрсонала ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСна ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»Ρ‹.

ΠžΡ‚Π΄Π΅Π» ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· массива Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠΎΠ². НапримСр, Π² ΠΎΡ‚Π΄Π΅Π»Π΅ sales Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ 2 сотрудника: Π”ΠΆΠΎΠ½ ΠΈ Алиса.

Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ростС ΠΏΠΎΠ΄ΠΎΡ‚Π΄Π΅Π»Π° ΠΎΠ½ дСлится Π½Π° подраздСлСния (ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, допустим, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° функция для получСния суммы всСх Π·Π°Ρ€ΠΏΠ»Π°Ρ‚. Как ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ?

Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ прост, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ структура довольно слоТная. ΠŸΠ΅Ρ€Π²Π°Ρ идСя Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» for ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° company с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ Π½Π°Π΄ ΠΎΡ‚Π΄Π΅Π»Π°ΠΌΠΈ 1-Π³ΠΎ уровня влоТСнности. Но Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ большС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ² для ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ сотрудниками ΠΎΡ‚Π΄Π΅Π»ΠΎΠ² Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ уровня, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ sites … А Π·Π°Ρ‚Π΅ΠΌ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ Ρ†ΠΈΠΊΠ» ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»Π°ΠΌ 3-Π³ΠΎ уровня, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ? Если ΠΌΡ‹ помСстим Π² ΠΊΠΎΠ΄ 3-4 Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π° для ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ довольно нСкрасиво.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ.

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, ΠΊΠΎΠ³Π΄Π° наша функция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π» для подсчёта суммы Π·Π°Ρ€ΠΏΠ»Π°Ρ‚, Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… случая:

Π‘Π»ΡƒΡ‡Π°ΠΉ (1), ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ массив, являСтся Π±Π°Π·ΠΎΠΉ рСкурсии, Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ случаСм.

Π‘Π»ΡƒΡ‡Π°ΠΉ (2), ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, являСтся шагом рСкурсии. БлоТная Π·Π°Π΄Π°Ρ‡Π° раздСляСтся Π½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ для ΠΏΠΎΠ΄ΠΎΡ‚Π΄Π΅Π»ΠΎΠ². Они ΠΌΠΎΠ³ΡƒΡ‚, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, снова Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΏΠΎΠ΄ΠΎΡ‚Π΄Π΅Π»Ρ‹, Π½ΠΎ Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ это Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ закончится, ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ свСдётся ΠΊ ΡΠ»ΡƒΡ‡Π°ΡŽ (1).

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

РСкурсия. РСкурсивныС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

По извСстному Π²Π°ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ доступности ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²), Π² Ρ‚Π΅Π»Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ доступны всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹), ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² самой ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹) ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²ΠΎ всСх ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰ΠΈΡ… Π±Π»ΠΎΠΊΠ°Ρ…, Π² Ρ‚ΠΎΠΌ числС ΠΈ имя самой ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ составляСт случай, ΠΊΠΎΠ³Π΄Π° пСрСмСнная (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚) ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ΅-ΠΆΠ΅ имя ΠΊΠ°ΠΊ ΠΈ пСрСмСнная Π² ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΈ экранируСт собой Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

БлСдствиСм ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΎ доступности ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²) являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ самой сСбя.

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, производящиС Π²Ρ‹Π·ΠΎΠ² "самих сСбя" Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ рСкурсивными.

РСкурсия. РСкурсивный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ.

РСкурсиСй называСтся ситуация, ΠΊΠΎΠ³Π΄Π° какая-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° прямо ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сСбя Π² качСствС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈ этом Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ называСтся рСкурсивным.

Π’ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ ΠΎΡ‡Π΅Π½ΡŒ часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ чисСл, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ‡Π»Π΅Π½ выраТаСтся Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅. Π’ арифмСтичСской прогрСссии, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ‡Π»Π΅Π½ Ρ€Π°Π²Π΅Π½ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ, ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΠΎΠΌΡƒ Π½Π° Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ прогрСссии:

Π€ΠΎΡ€ΠΌΡƒΠ»Ρ‹, Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Ρ‡Π»Π΅Π½ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ‡Π»Π΅Π½ΠΎΠ², Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Π½Ρ‹ΠΌΠΈ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ.

Рассмотрим для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° n!. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ произвСдСния ΠΏΠ΅Ρ€Π²Ρ‹Ρ… n чисСл Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ряда

Π’Π°ΠΊΠΎΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… конструкций (итСрация ― это ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ†ΠΈΠΊΠ»Π° For

Procedure TForm1.Button1Click(Sender: TObject);

n:=StrToInt(Edit1.Text); // Π’Π²ΠΎΠ΄ΠΈΠΌ n для вычислСния n!

For i:=1 to n do fact:=Fact*i;

Label1.Caption:='Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» ' +IntToStr(n)+'! ='+IntToStr(fact);

Однако сущСствуСт Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ n! выраТаСтся Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ (n-1)!, Ρ‚.Π΅. ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ рСкуррСнтная Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°:

НаличиС Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ. НапримСр, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° n! ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

Label1.Caption:=' Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» '+IntToStr(n)+'! ='+IntToStr(fact(n));

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, вспомним, Ρ‡Ρ‚ΠΎ Π½Π° врСмя выполнСния ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° приостанавливаСтся, Π° Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти выдСляСтся мСсто для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π°Ρ… ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти "Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡ" приостановлСнныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΈ рСкурсивных Π²Ρ‹Π·ΠΎΠ²Π°Ρ… ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fact происходит Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‚.Π΅. ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fact для Π΅Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ ячСйки памяти. ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ эти ячСйки ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ рСкурсивныС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ простотой, Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ΄Π°. Однако Π·Π° эту простату приходится Ρ€Π°ΡΠΏΠ»Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ нСэкономным использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ рСкурсивных ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π²ΠΎ врСмя выполнСния, Ρ‡Π΅ΠΌ нСрСкурсивных. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ рСкурсивном Π²Ρ‹Π·ΠΎΠ²Π΅ для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ ячСйки памяти Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ стСкС.

Π’ Delphi Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° рСкурсивныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ рСкурсивный Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ всС эти ΠΊΠΎΠΏΠΈΠΈ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Ρ… рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ нСзависимо Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°.

Для рассмотрСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌ рСкурсивных ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π²Π²Π΅Π΄Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ опрСдСлСния, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ рСкурсии.

МаксимальноС число рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ происходит Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, называСтся Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ рСкурсии.

Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ рСкурсии.

Число рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, называСтся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ рСкурсии.

Π€ΠΎΡ€ΠΌΡ‹ рСкурсивных ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС любая рСкурсивная ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π΅ Rec) Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ мноТСство ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² S ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² рСкурсивного Π²Ρ‹Π·ΠΎΠ²Π° P.

Π“Π»Π°Π²Π½ΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ рСкурсивным ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ.

Π“Π»Π°Π²Π½ΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ рСкурсивным ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² рСкурсивной ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ ΡƒΡ€ΠΎΠ²Π½Π΅ рСкурсии станСт Π»ΠΎΠΆΠ½Ρ‹ΠΌ. Если условиС истинно, Ρ‚ΠΎ рСкурсивный спуск продолТаСтся. Когда ΠΎΠ½ΠΎ становится Π»ΠΎΠΆΠ½Ρ‹ΠΌ, Ρ‚ΠΎ спуск заканчиваСтся ΠΈ начинаСтся рСкурсивный Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΈΠ· всСх Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Ρ… Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΏΠΈΠΉ рСкурсивной ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

БущСствуСт Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΡ‹ рСкурсивных ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ:

1) Π€ΠΎΡ€ΠΌΠ° с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ дСйствий Π΄ΠΎ рСкурсивного Π²Ρ‹Π·ΠΎΠ²Π° (с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ дСйствий Π½Π° рСкурсивном спускС).

If условиС > then Rec;

2) Π€ΠΎΡ€ΠΌΠ° с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ дСйствий послС рСкурсивного Π²Ρ‹Π·ΠΎΠ²Π° (с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ дСйствий Π½Π° рСкурсивном Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅).

If условиС > then Rec;

3) Π€ΠΎΡ€ΠΌΠ° с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ дСйствий ΠΊΠ°ΠΊ Π΄ΠΎ, Ρ‚Π°ΠΊ ΠΈ послС рСкурсивного Π²Ρ‹Π·ΠΎΠ²Π° (с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ дСйствий ΠΊΠ°ΠΊ Π½Π° рСкурсивном спускС, Ρ‚Π°ΠΊ ΠΈ Π½Π° рСкурсивном Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅).

If условиС > then Rec;

ВсС Ρ„ΠΎΡ€ΠΌΡ‹ рСкурсивных ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ находят ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. МногиС Π·Π°Π΄Π°Ρ‡ΠΈ, Π² Ρ‚ΠΎΠΌ числС вычислСниС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°, Π±Π΅Π·Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ ΠΊ Ρ‚ΠΎΠΌΡƒ, какая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ„ΠΎΡ€ΠΌΠ° рСкурсивной ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹.

РассмотрСнная Π² Π½Π°Ρ‡Π°Π»Π΅ рСкурсивная функция fact, выполняСт вычислСниС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅. Рассмотрим Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ дСйствия этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ вычислСнии 5!, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ трассировку ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (запись Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… этапах выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹).

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΡ‹ использовали Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ числа. ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для вычислСния n! ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΡΠΌΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° основС Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ. Но Π² ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв это Π½Π΅ Ρ‚Π°ΠΊ. Π’ качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для вычислСния Ρ‡Π»Π΅Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Π½ΠΎΠ΅ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅

для любого n>2 F(n)=F(n-1)+F(n-2)

выглядит Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ прямая Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии

ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, благодаря ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ быстро Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ эти числа:

If (i=1) or (i=2) then fib:=1

РСкурсивный Π²Ρ‹Π·ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ косвСнным. Π’ этом случаС ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° обращаСтся ΠΊ сСбС опосрСдованно, ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТится ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Procedure A (i : Byte);

Procedure Π’ (j : Byte) ;

Если строго ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ, согласно ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ описан, Ρ‚ΠΎ Ρ‚Π°ΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСльзя. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Π²Ρ‹Π·ΠΎΠ²Ρ‹ стали Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹, вводится ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°ΡŽΡ‰Π΅Π΅ описаниС:

Procedure Π’ (j : Byte); Forward;

Procedure A (i : Byte);

Как Π²ΠΈΠ΄ΠΈΠΌ, ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°ΡŽΡ‰Π΅Π΅ описаниС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ лишь Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π², Π° Π΅Π΅ Ρ‚Π΅Π»ΠΎ замСняСтся стандартной Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ Forward. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ А ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ Π’ ― вСдь ΠΎΠ½Π° ΡƒΠΆΠ΅ описана, Ρ‚ΠΎΡ‡Π½Π΅Π΅, извСстны Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΈ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π²Ρ‹Π·ΠΎΠ². ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ρ‚Π΅Π»ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π’ начинаСтся Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΠΆΠ΅ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ описанныС Ρ€Π°Π½Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования рСкурсивной ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Π—Π°Π΄Π°Ρ‡Π°: ΠΏΠ°Ρ€Π° ΠΊΡ€ΠΎΠ»ΠΈΠΊΠΎΠ² приносит Ρ€Π°Π· Π² мСсяц ΠΏΡ€ΠΈΠΏΠ»ΠΎΠ΄ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΊΡ€ΠΎΠ»ΡŒΡ‡Π°Ρ‚ (самца ΠΈ самки), ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π½ΠΎΠ²ΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Π΅ ΠΊΡ€ΠΎΠ»ΡŒΡ‡Π°Ρ‚Π° Ρ‡Π΅Ρ€Π΅Π· Π΄Π²Π° мСсяца послС роТдСния ΡƒΠΆΠ΅ приносят ΠΏΡ€ΠΈΠΏΠ»ΠΎΠ΄. Бколько ΠΏΠ°Ρ€ ΠΊΡ€ΠΎΠ»ΠΈΠΊΠΎΠ² появится Ρ‡Π΅Ρ€Π΅Π· Π³ΠΎΠ΄, Ссли Π² Π½Π°Ρ‡Π°Π»Π΅ Π³ΠΎΠ΄Π° Π±Ρ‹Π»Π° ΠΎΠ΄Π½Π° ΠΏΠ°Ρ€Π° ΠΊΡ€ΠΎΠ»ΠΈΠΊΠΎΠ² ΠΈ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π³ΠΎΠ΄Π° ΠΊΡ€ΠΎΠ»ΠΈΠΊΠΈ Π½Π΅ ΡƒΠΌΠΈΡ€Π°ΡŽΡ‚, Π° ΠΈΡ… воспроизводство Π½Π΅ заканчиваСтся?

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии

Procedure recursya(i:Int64; Var kol1:Int64; Var kol2:Int64);

kol1:=1; //ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ количСство ΠΏΠ°Ρ€ ΠΊΡ€ΠΎΠ»ΠΈΠΊΠΎΠ²

kol2:=2; //количСство ΠΏΠ°Ρ€ ΠΊΡ€ΠΎΠ»ΠΈΠΊΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· мСсяц

i:=i-1; // рСкурсивный спуск

Procedure TForm1.Button1Click(Sender: TObject);

1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ рСкурсия?

2. КакиС ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ€Π΅ΠΊΡƒΡ€Ρ€Π΅Π½Ρ‚Π½Ρ‹ΠΌΠΈ?

3. Π’ Ρ‡Π΅ΠΌ Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ прСимущСства ΠΈ нСдостатки Π² использовании рСкурсивных ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с нСрСкурсивными?

4. Π§Ρ‚ΠΎ называСтся Π³Π»ΡƒΠ±ΠΈΠ½ΠΎΠΉ рСкурсии?

5. Π§Ρ‚ΠΎ называСтся Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ рСкурсии?

6. Π‘Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ основныС трСбования ΠΊ рСкурсивным ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ.

7. НазовитС Ρ„ΠΎΡ€ΠΌΡ‹ рСкурсивных ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

8. Π§Ρ‚ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ рСкурсивным спуском ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ?

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *