Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»

ЯвляСтся Π»ΠΈ рСкурсия быстрСС, Ρ‡Π΅ΠΌ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΠ΅?

Π― знаю, Ρ‡Ρ‚ΠΎ рСкурсия ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡ΠΈΡ‰Π΅, Ρ‡Π΅ΠΌ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΠ΅, ΠΈ я Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ½Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, я знаю, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ вопросов ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ.

Π§Ρ‚ΠΎ я ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽ, Ρ‚Π°ΠΊ Π»ΠΈ рСкурсия всСгда быстрСС, Ρ‡Π΅ΠΌ Ρ†ΠΈΠΊΠ»? МнС каТСтся, Π²Ρ‹ всСгда смоТСтС ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ» ΠΈ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ быстрСС, Ρ‡Π΅ΠΌ рСкурсивная функция, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» отсутствуСт, постоянно настраивая Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠ°Π΄Ρ€Ρ‹ стСка.

Π― ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΈΡ‰Ρƒ, являСтся Π»ΠΈ рСкурсия быстрСС Π² прилоТСниях, Π³Π΄Π΅ рСкурсия являСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ способом ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… функциях сортировки, Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΡΡ… ΠΈ Ρ‚. Π”.

Π­Ρ‚ΠΎ зависит ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ языка. Π’Ρ‹ написали «нСзависимый ΠΎΡ‚ языка», поэтому я ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

Π’ Java, C ΠΈ Python рСкурсия довольно Π΄ΠΎΡ€ΠΎΠ³Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ (Π² Ρ†Π΅Π»ΠΎΠΌ), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ выдСлСния Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ° стСка. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… C-компиляторах ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ компилятора, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ эти ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ рСкурсии (фактичСски, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ хвостовых Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²) Π² ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ вмСсто Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π― знаю, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСализациях Scheme рСкурсия, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΠ΅.

ΠšΠΎΡ€ΠΎΡ‡Π΅ говоря, ΠΎΡ‚Π²Π΅Ρ‚ зависит ΠΎΡ‚ ΠΊΠΎΠ΄Π° ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ любой ΡΡ‚ΠΈΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ язык, рСкурсия ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ быстрСС. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ язык, итСрация, вСроятно, быстрСС. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… срСдах ΠΎΠ±Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° приводят ΠΊ созданию ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ сборки (помСститС Π΅Π΅ Π² свою Ρ‚Ρ€ΡƒΠ±Ρƒ ΠΈ Π²Ρ‹ΠΊΡƒΡ€ΠΈΡ‚Π΅ Π΅Π΅).

рСкурсия всСгда быстрСС, Ρ‡Π΅ΠΌ Ρ†ΠΈΠΊΠ»?

НСт, Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ всСгда Π±ΡƒΠ΄Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ РСкурсия. (Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Ρ„ΠΎΠ½ НСймана)

ОбъяснСниС:

Если Π²Ρ‹ создаСтС минимальноС количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° с нуля, Β«Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡΒ» стоит Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ мСстС Π² качСствС ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ мСньшС рСсурсов, Ρ‡Π΅ΠΌ «рСкурсия», ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, это быстрСС.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ псСвдо-Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ с нуля:

Π—Π°Π΄Π°ΠΉΡ‚Π΅ сСбС вопрос : Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ ΠΈ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°?

ΠœΡ‹ создадим ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ понятий, начиная с нуля ΠΈ опрСдСляя Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅, основныС понятия, Π·Π°Ρ‚Π΅ΠΌ создадим понятия Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ уровня с Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π°) Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ячСйки памяти

Π±) Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ°

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ 3 шага с нСявной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Β«resultΒ».

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ инструкций : Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ шагов, Ρƒ вас Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ нСявный Β«ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ инструкций». Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ инструкции ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΈ продвигаСтся послС чтСния инструкции, Π½ΠΎ Π΄ΠΎ Π΅Π΅ выполнСния.

БСсконСчная итСрация : отскочив Π½Π°Π·Π°Π΄, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π°Π³Π΅Π½Ρ‚Π° Β«ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒΒ» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство шагов. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρƒ нас Π΅ΡΡ‚ΡŒ бСсконСчная итСрация.

РСализация: (Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ)

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΎΠ΄Π½ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ: Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ· ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Если Π²Ρ‹ это сдСлаСтС, Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ адрСс (Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ), поэтому Π²Ρ‹ Π½Π΅ смоТСтС Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ для ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ: Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ STACK

Π‘Ρ‚Π΅ΠΊ : Π’Ρ‹ опрСдСляСтС пространство памяти для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² качСствС «стСка», Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Β«Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΒ» значСния Π² стСк, Π° Ρ‚Π°ΠΊΠΆΠ΅ Β«Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΒ» послСднСС Β«Π²Ρ‹Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΠΎΠ΅Β» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ стСка Π²Π°ΠΌ понадобится ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ стСка (ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ инструкций), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Β«Π²Π΅Ρ€Ρ…ΡƒΡˆΠΊΡƒΒ» стСка. Когда Π²Ρ‹ Β«Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚Π΅Β» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ стСка ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ, ΠΈ Π²Ρ‹ сохраняСтС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Когда Π²Ρ‹ Β«Π²Ρ‹Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚Π΅Β», Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² фактичСском ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ стСка, Π° Π·Π°Ρ‚Π΅ΠΌ увСличиваСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ стСка.

РСкурсия : Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сСбя? Π­Ρ‚ΠΎ называСтся «Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡ».

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

Достигнув рСкурсии, ΠΌΡ‹ останавливаСмся здСсь.

Π’Ρ‹Π²ΠΎΠ΄:

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ всСгда Π±ΡƒΠ΄Π΅Ρ‚ быстрСС Π² машинном ΠΊΠΎΠ΄Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ мСньшС инструкций ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, мСньшС Ρ†ΠΈΠΊΠ»ΠΎΠ² ЦП.

Какой Π»ΡƒΡ‡ΡˆΠ΅»?

Π’Π°ΠΌ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽΒ», ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ простыС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Π²Π΅Π·Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ «простой Ρ†ΠΈΠΊΠ»Β».

Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽΒ», ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ… (ΠΌΠ½Π΅ нравится Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Β«Ρ„Ρ€Π°ΠΊΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ…Β»), ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° рСкурсивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ явно Π±ΠΎΠ»Π΅Π΅ «элСгантно».

Π‘ΠΎΠ²Π΅Ρ‚ : ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π»ΡƒΡ‡ΡˆΠΈΠΉ инструмСнт для Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΠΉΡ‚Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ инструмСнта, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΌΡƒΠ΄Ρ€ΠΎ.

РСкурсия ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ быстрСС, Ссли Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ являСтся явноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ стСком, ΠΊΠ°ΠΊ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… сортировки ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π°, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ упомянули.

Π£ мСня Π±Ρ‹Π» случай, ΠΊΠΎΠ³Π΄Π° пСрСписываниС рСкурсивного Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π² Java сдСлало Π΅Π³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сначала Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ СстСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎΠ΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅.

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

РСкурсия ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ быстрСС, Ρ‡Π΅ΠΌ Ρ†ΠΈΠΊΠ»?

Π― знаю, Ρ‡Ρ‚ΠΎ рСкурсия ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡ΠΈΡ‰Π΅, Ρ‡Π΅ΠΌ Ρ†ΠΈΠΊΠ», ΠΈ я Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° я Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ ΠΏΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, я знаю, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ вопросов ΠΎΠ± этом.

Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ я ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽ, это рСкурсия ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ быстрСС, Ρ‡Π΅ΠΌ Ρ†ΠΈΠΊΠ»? МнС каТСтся, Ρ‡Ρ‚ΠΎ Π²Ρ‹ всСгда смоТСтС ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ» ΠΈ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ быстрСС, Ρ‡Π΅ΠΌ рСкурсивная функция, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» отсутствуСт, постоянно настраивая Π½ΠΎΠ²Ρ‹ΠΉ стСк ΠΊΠ°Π΄Ρ€Ρ‹.

Π― ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΈΡ‰Ρƒ, быстрСС Π»ΠΈ рСкурсия Π² прилоТСниях, Π³Π΄Π΅ рСкурсия являСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ способом ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… функциях сортировки, Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π΅Ρ€Π΅Π²ΡŒΡΡ… ΠΈ Ρ‚. Π΄.

12 ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²

Π­Ρ‚ΠΎ зависит ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ языка. Π’Ρ‹ написали «ΡΠ·Ρ‹ΠΊ-агностик», поэтому я ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

Π² Java, C ΠΈ Python рСкурсия довольно Π΄ΠΎΡ€ΠΎΠ³Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ (Π² Ρ†Π΅Π»ΠΎΠΌ), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ выдСлСния Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Π΄Ρ€Π° стСка. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… компиляторах C ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ компилятора для устранСния этих Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ рСкурсии (фактичСски, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ хвостовых Π²Ρ‹Π·ΠΎΠ²ΠΎΠ²) Π² ΠŸΡ€Ρ‹ΠΆΠΊΠΈ вмСсто Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

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

Π― знаю, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСализациях схСма рСкурсия ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ Ρ†ΠΈΠΊΠ».

ΠΊΠΎΡ€ΠΎΡ‡Π΅, ΠΎΡ‚Π²Π΅Ρ‚ зависит ΠΎΡ‚ ΠΊΠΎΠ΄Π° ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой ΡΡ‚ΠΈΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ язык, рСкурсия ΠΌΠΎΠΆΠ΅Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ быстрСС. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ язык, итСрация Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅ быстрСС. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… срСдах ΠΎΠ±Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ Ρ‚Π° ΠΆΠ΅ сборка гСнСрируСтся (помСститС это Π² свою Ρ‚Ρ€ΡƒΠ±ΠΊΡƒ ΠΈ ΠΊΡƒΡ€ΠΈΡ‚Π΅ Π΅Π΅).

Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… срСдах Π»ΡƒΡ‡ΡˆΠ΅ΠΉ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ являСтся Π½Π΅ рСкурсия ΠΈ Π½Π΅ итСрация, Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ высокого порядка. К Π½ΠΈΠΌ относятся «ΠΊΠ°Ρ€Ρ‚Π°», «Ρ„ΠΈΠ»ΡŒΡ‚Ρ€» ΠΈ «ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ»(ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ называСтся «ΡΠ³ΠΈΠ±»). Они Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ стилСм, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ часто Ρ‡ΠΈΡ‰Π΅, Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… срСдах эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ ( ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠΌΠΏΡƒΠ»ΡŒΡ ΠΎΡ‚ автоматичСского распараллСливания-Ρ‚Π°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС, Ρ‡Π΅ΠΌ итСрация ΠΈΠ»ΠΈ рСкурсия. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠΉ срСды являСтся Data Parallel Haskell.

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

рСкурсия ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ быстрСС, Ρ‡Π΅ΠΌ Ρ†ΠΈΠΊΠ»?

Π½Π΅Ρ‚, итСрация всСгда Π±ΡƒΠ΄Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ рСкурсия. (Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Ρ„ΠΎΠ½ НСймана)

объяснСниС:

Ссли Π²Ρ‹ создадитС ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° с нуля, » итСрация «Π±ΡƒΠ΄Π΅Ρ‚ сначала ΠΊΠ°ΠΊ ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π½Π΅Π΅ рСсурсоСмкой, Ρ‡Π΅ΠΌ» рСкурсия», ergo Π±ΡƒΠ΄Π΅Ρ‚ быстрСС.

построСниС псСвдо-Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ с нуля:

вопрос: Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚. Π΅. ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ ΠΈ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°?

ΠΌΡ‹ установим ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ понятий, начиная с нуля ΠΈ опрСдСляя Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ основныС, ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ понятия, Π·Π°Ρ‚Π΅ΠΌ построим ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ уровня с Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

ΠŸΠ΅Ρ€Π²Π°Ρ ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ: ячСйки памяти, Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, состояниС. Π”Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½ΡƒΠΆΠ½ΠΎ мСст для хранСния ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас Π΅ΡΡ‚ΡŒ бСсконСчный массив «Ρ†Π΅Π»ΠΎΡ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ…» ячССк, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… , M[0..БСсконСчный.]

инструкции: сдСлайтС Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ-ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ ячСйку, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ состояниС. КаТдая интСрСсная инструкция выполняСт ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ инструкции:

a) ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ячСйки памяти

b)Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ°

порядок шагов: ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ инструкций: Ρ‚. Π΅.: сдСлайтС это сначала, сдСлайтС это послС ΠΈ Ρ‚. Π΄. Π˜ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ инструкций. Π”Π°ΠΆΠ΅ ΠΎΠ΄Π½Ρƒ строчку!—11—>выраТСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ «ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ инструкций». Если Ρƒ вас Π΅ΡΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ «ΠΏΠΎΡ€ΡΠ΄ΠΊΠΎΠΌ ΠΎΡ†Π΅Π½ΠΊΠΈ» Ρƒ вас Π΅ΡΡ‚ΡŒ шаги. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ ΠΎΠ΄Π½ΠΎ составлСнноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ нСявныС «ΡˆΠ°Π³ΠΈ», Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΡΠ²Π½ΡƒΡŽ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ (Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π΅»Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚»). Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΡˆΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ 3 шага с нСявной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ «Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚».

поэтому Π΄Π°ΠΆΠ΅ выраТСния infix, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ порядок ΠΎΡ†Π΅Π½ΠΊΠΈ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ импСративная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ инструкций. Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сдСланы Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ порядкС, ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ шаги, сущСствуСт Ρ‚Π°ΠΊΠΆΠ΅ нСявная промСТуточная пСрСмСнная «Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚».

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ: Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ шагов, Ρƒ вас Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ нСявный «ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ инструкции». Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ инструкции ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΈ продвигаСтся послС чтСния инструкции, Π½ΠΎ Π΄ΠΎ выполнСния инструкции.

Π² этой псСвдо-Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ машинС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ инструкции являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ . (ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ «ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ рСгистр» Π² ядрС процСссора, Π½ΠΎ здСсь ΠΌΡ‹ упростим понятия ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ всС Π΄Π°Π½Π½Ρ‹Π΅ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ рСгистры) ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ «ΠΏΠ°ΠΌΡΡ‚ΠΈ»)

БСсконСчныС Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ: By ΠΏΡ€Ρ‹ΠΆΠΊΠΈ Π½Π°Π·Π°Π΄, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π°Π³Π΅Π½Ρ‚Π° «ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство шагов. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρƒ нас Π΅ΡΡ‚ΡŒ бСсконСчныС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π¨Π°Π³: Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ с условный прСдлоТСния, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ бСсконСчного Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€Ρ‹ΠΆΠΎΠΊ Π½Π°Π·Π°Π΄ инструкция. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ условный Ρ†ΠΈΠΊΠ» Π° Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ шаг

наимСнования: Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ полоТСнию памяти Π΄Π΅Ρ€ΠΆΠ° Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π΄Π΅Ρ€ΠΆΠ° шаг. Π­Ρ‚ΠΎ просто «ΡƒΠ΄ΠΎΠ±ΡΡ‚Π²ΠΎ». ΠœΡ‹ Π½Π΅ добавляСм Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π½ΠΎΠ²Ρ‹Ρ… инструкций, имСя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ «ΠΈΠΌΠ΅Π½Π°» для участков памяти. «Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅» Π½Π΅ являСтся инструкциСй для Π°Π³Π΅Π½Ρ‚Π°, это просто удобство для нас. наимСнования Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ (Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚) Π»Π΅Π³Ρ‡Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ Π»Π΅Π³Ρ‡Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ.

ΠΎΠ΄Π½ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π΅ΡΡ‚ΡŒ ряд шагов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ часто. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ шаги Π² ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² памяти, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ это ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡ… (Π²Ρ‹Π·ΠΎΠ²). Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°, Π²Ρ‹ созданиС Π½ΠΎΠ²ΠΎΠΉ инструкции (ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹), составляя основныС инструкции.

рСализация: (Π½Π΅ трСбуСтся Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ)

ΠΈΠΌΠ΅Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ°Ρ рСализация для ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ: Π’Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ стСк

стСк: Π²Ρ‹ опрСдСляСтС пространство памяти для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠ°ΠΊ «ΡΡ‚Π΅ΠΊ», Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅» Π½Π°ΠΆΠ°Ρ‚ΡŒ «Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ Π² стСкС, Π° Ρ‚Π°ΠΊΠΆΠ΅» ΠΏΠΎΠΏ «ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅» Π½Π°ΠΆΠ°Ρ‚ΠΎΠ΅ » Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ стСка Π²Π°ΠΌ понадобится Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π‘Ρ‚Π΅ΠΊΠ° (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ инструкции), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ «Π³ΠΎΠ»ΠΎΠ²ΠΊΡƒ» стСка. Когда Π²Ρ‹» Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚Π΅ » Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ стСка ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ, ΠΈ Π²Ρ‹ сохраняСтС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Когда Π²Ρ‹ «ΠΏΠΎΠΏ», Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° фактичСский ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ стСка, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ стСка увСличиваСтся.

ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ стСк ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². РСализация Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π°, Π½ΠΎ вмСсто хранСния указатСля инструкции Π² ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ памяти ΠΌΡ‹ «Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ IP Π² стСк. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΡ‹ просто » ΠΏΠΎΠΏ » Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· стСка, эффСктивно пСрСскакивая ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊ инструкции послС ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π° Π²Ρ‹Π·ΠΎΠ². Π­Ρ‚Π° рСализация, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ «ΡΡ‚Π΅ΠΊ», позволяСт Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Благодаря этому ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСсколько ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ абстракции ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹Π΅ инструкции ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ основныС инструкции ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² качСствС ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ².

рСкурсия: Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сСбя?. Π­Ρ‚ΠΎ называСтся «Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡ».

: ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² памяти. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ / ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‚Π΅ ΠΆΠ΅ шаги,Ссли ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ хранится Π² ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… мСстах памяти (Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…), ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ пСрСзаписаны Π½Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ….

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

достиг рСкурсия ΠΌΡ‹ останавливаСмся здСсь.

Π²Ρ‹Π²ΠΎΠ΄:

шаг всСгда Π±ΡƒΠ΄Π΅Ρ‚ быстрСС Π² машинном ΠΊΠΎΠ΄Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ мСньшС инструкций, поэтому мСньшС Ρ†ΠΈΠΊΠ»ΠΎΠ² процСссора.

ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… «Π»ΡƒΡ‡ΡˆΠ΅»?

Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ «ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ», ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ простой, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Π²Π΅Π·Π΄Π΅ «ΠΏΡ€ΠΎΡΡ‚ΠΎΠΉ Ρ†ΠΈΠΊΠ»» Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ.

Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ «Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ», ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ… (ΠΌΠ½Π΅ нравится Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ…» Ρ„Ρ€Π°ΠΊΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ…»), ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° рСкурсивноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ явно Π±ΠΎΠ»Π΅Π΅»ΡΠ»Π΅Π³Π°Π½Ρ‚Π½ΠΎΠ΅».

совСты: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π»ΡƒΡ‡ΡˆΠΈΠΉ инструмСнт для Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ инструмСнта, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΌΡƒΠ΄Ρ€ΠΎ.

рСкурсия ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ быстрСС, Ссли Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ являСтся явноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ стСком, ΠΊΠ°ΠΊ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… сортировки ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ упомянули.

Π£ мСня Π±Ρ‹Π» случай, ΠΊΠΎΠ³Π΄Π° пСрСписываниС рСкурсивного Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π° Java сдСлало Π΅Π³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅.

поэтому ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сначала Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ самым СстСствСнным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ссли ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ это ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎΠ΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅.

хвостовая рСкурсия Ρ‚Π°ΠΊ ΠΆΠ΅ быстро, ΠΊΠ°ΠΊ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΠ΅. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… языках Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° хвостовая рСкурсия.

рассмотрим, Ρ‡Ρ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ, ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ рСкурсии.

Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ здСсь Π½Π΅ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ мСста для Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ.

(Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ рСкурсия являСтся хвостовым Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΈ компилятор Π·Π½Π°Π΅Ρ‚ ΠΎΠ± этой ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ).

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

TL;DR рСкурсивныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ…ΡƒΠ΄ΡˆΠ΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ кэша, Ρ‡Π΅ΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅.

Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² здСсь Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚:зависит. НапримСр, Π²ΠΎΡ‚ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ C, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ проходят Ρ‡Π΅Ρ€Π΅Π· Π΄Π΅Ρ€Π΅Π²ΠΎ. Π‘Π½Π°Ρ‡Π°Π»Π° рСкурсивный:

ΠΈ Π²ΠΎΡ‚ Ρ‚Π° ΠΆΠ΅ функция, рСализованная с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ:

Π½Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΊΠΎΠ΄Π°. Π’ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ!—2—> ΡƒΠ·Π»Ρ‹ ΠΈ P_FOR_EACH_CHILD Π½Π΅ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ. Π’ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ вСрсии Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ явный стСк st Π½Π° ΠΊΠ°ΠΊΠΈΠ΅ ΡƒΠ·Π»Ρ‹ Π½Π°ΠΆΠΈΠΌΠ°ΡŽΡ‚ΡΡ, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹ΡΠΊΠ°ΠΊΠΈΠ²Π°ΡŽΡ‚ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚.

Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ рСкурсивныС CALL для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°.

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

Π½ΠΎ это обсуТдСниС Π² основном спорно, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ рСкурсивноС Π΄Π΅Ρ€Π΅Π²ΠΎ Ρ…ΠΎΠ΄ΡŒΠ±Π°-это Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Если Ρƒ вас достаточно большоС Π΄Π΅Ρ€Π΅Π²ΠΎ, Ρƒ вас закончится пространство callstack, поэтому Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ.

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

Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ большС ΠΎ»Ρ‡Ρ‚ΠΎ» вмСсто «ΠΊΠ°ΠΊ«.

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

Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программиста-это Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ Ρ€Π΅ΠΌΠΎΠ½Ρ‚ΠΎΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΡΡ‚ΡŒ, Π° Π½Π΅ оптимизация Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ мСсто. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, «ΠΏΡ€Π΅ΠΆΠ΄Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ оптимизация-это ΠΊΠΎΡ€Π΅Π½ΡŒ всСх Π·ΠΎΠ»».

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Π½Π΅Ρ‚, рСкурсия Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ быстрСС Ρ†ΠΈΠΊΠ»Π° Π² любом рСалистичном использовании, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ТизнСспособныС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠΎΠ±Π΅ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ…. Π― имСю Π² Π²ΠΈΠ΄Ρƒ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π²Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ, Π½ΠΎ Π±Ρ‹Π»ΠΈ Π±Ρ‹ Π»ΡƒΡ‡ΡˆΠΈΠ΅ способы Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Π·ΠΎΠΉΡ‚ΠΈ Π»ΡŽΠ±ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСкурсии.

Π²Ρ‹ ΠΏΠΎΠΏΠ°Π»ΠΈ Π² гвоздь Π½Π° Π³ΠΎΠ»ΠΎΠ²Π΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹; созданиС ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°Π΄Ρ€ΠΎΠ² стСка Π΄ΠΎΡ€ΠΎΠΆΠ΅, Ρ‡Π΅ΠΌ простой ΠΏΡ€Ρ‹ΠΆΠΎΠΊ.

, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ я сказал: «ΠΈΠΌΠ΅Π΅Ρ‚ ТизнСспособныС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠΎΠ±Π΅ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ…». Для Ρ‚Π°ΠΊΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ сортировки, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ сущСствуСт ΠΎΡ‡Π΅Π½ΡŒ ТизнСспособного способа ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ эффСктивно настраиваСт свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ стСка ΠΈΠ·-Π·Π° появлСния Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… «Π·Π°Π΄Π°Ρ‡», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ своСй сути ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ процСсса. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, рСкурсия ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ быстрой, ΠΊΠ°ΠΊ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π°.

Edit: этот ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π½Π΅Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ языки, Π³Π΄Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ основных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Ρ‡ΠΈΠ²Ρ‹ΠΉ. Π­Ρ‚ΠΎ Π½Π΅ относится ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ языкам.

согласно Ρ‚Π΅ΠΎΡ€ΠΈΠΈ это Ρ‚ΠΎ ΠΆΠ΅ самоС. РСкурсия ΠΈ Ρ†ΠΈΠΊΠ» с Ρ‚ΠΎΠΉ ΠΆΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ O() Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ‚ΠΎΠΉ ΠΆΠ΅ тСорСтичСской ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, Π½ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ зависит ΠΎΡ‚ языка, компилятора ΠΈ процСссора. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ числа ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ способом с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ O (ln (n)):

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

РСкурсия ΠΈ Ρ†ΠΈΠΊΠ», Π² Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π°? На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Python

Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»

Π¦ΠΈΠΊΠ» β€” это Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ инструмСнт Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. БущСствуСт мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Ρ†ΠΈΠΊΠ»ΠΎΠ², Π½ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ всС ΠΎΠ½ΠΈ выполнят ΠΎΠ΄Π½Ρƒ Π±Π°Π·ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ: ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… дСйствий Π½Π°Π΄ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, для ΠΈΡ… Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΠ»ΠΈ управлСния ΠΈΠΌΠΈ. РСкурсия, Ρ‚Π°ΠΊ ΠΆΠ΅ распространённый способ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΈ Ρ†ΠΈΠΊΠ», Π½ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΌΠ΅Π½Π΅Π΅ понятный ΠΈ часто Π±ΠΎΠ»Π΅Π΅ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΉ. ΠŸΠΎΡ‡Ρ‚ΠΈ всС рСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ†ΠΈΠΊΠ»Ρ‹, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ свои прСимущСства ΠΈ нСдостатки, ΠΈ сСгодня Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, Π² ΠΊΠ°ΠΊΠΈΡ… случаях ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ вопросы:

Начнём с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ каТСтся Π±ΠΎΠ»Π΅Π΅ простым ΠΈΠ· этих Π΄Π²ΡƒΡ….

Π¦ΠΈΠΊΠ»Ρ‹ for

Π¦ΠΈΠΊΠ» for ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (списка, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, словаря, Π½Π°Π±ΠΎΡ€Π° ΠΈΠ»ΠΈ строки). ΠŸΡ€ΠΈ достиТСнии ΠΊΠΎΠ½Ρ†Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.

НапримСр, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ числа ΠΎΡ‚ 1 Π΄ΠΎ 5 ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… сумму. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 1+2+3+4+5. Но, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ смоТСтС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ подставляя Π»ΡŽΠ±Ρ‹Π΅ значСния, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΈ Π½Π΅ извСстны Π·Π°Ρ€Π°Π½Π΅Π΅.

Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ список всСх чисСл, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ элСмСнты ΠΈ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это выглядит Π² ΠΊΠΎΠ΄Π΅:

Запустив ΠΊΠΎΠ΄, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ всС числа Π½Π° своих мСстах ΠΈ Π½Π°ΠΌ возвращаСтся ΠΈΡ… сумма.

Π’Ρ‹Π²ΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

РСкурсия

Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»

Если функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сама сСбя, Ρ‚ΠΎ это являСтся ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ рСкурсии. Одно ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ рСкурсии ΠΎΡ‚ Ρ†ΠΈΠΊΠ»Π°, это способ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ†ΠΈΠΊΠ» for Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ выполняСтся. А Π²ΠΎΡ‚ рСкурсивная функция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ бСсконСчно, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ВмСсто этого Ρƒ рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ условиС. Π‘Π°Π·ΠΎΠ²ΠΎΠ΅ условиС опрСдСляСт, ΠΊΠΎΠ³Π΄Π° Ρ†ΠΈΠΊΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ рСкурсивным способом. Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ это выглядит Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· функция Π»ΠΈΠ±ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сСбя с Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π»ΠΈΠ±ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это выглядит Π² ΠΊΠΎΠ΄Π΅:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ Π΄Π²Π° значСния: Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ 0, Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ 5. ΠœΡ‹ провСряСм, являСтся Π»ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ число 0. Если Π½Π΅Ρ‚, Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ снова, Π½ΠΎ Π½Π° этот Ρ€Π°Π· ΠΌΡ‹ мСняСм Π²Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° 5–1 ΠΈ 0+5, ΠΈ повторяСм этот процСсс Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° n Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ 0. ПослС выполнСния этого условия ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (15).

ВычислСниС слоТного ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π° рСкурсиСй ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠΌ FOR

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ. НуТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΡ€Π΅Π΄ΠΈΡ‚Π° ΠΈΠ»ΠΈ инвСстиции со слоТным ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅:

Π€ΠΎΡ€ΠΌΡƒΠ»Π° расчёта слоТного ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°:

Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»

Π’Π°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ всю сумму сразу. Но вмСсто этого, для расчёта ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ†ΠΈΠΊΠ» ΠΈΠ»ΠΈ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС пСрСмСнная Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (nt) Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² итСрациях.

Π”Π°Π²Π°ΠΉΡ‚Π΅ сразу создадим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ исходныС числа ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΈΡ… Π² ΠΎΠ±ΠΎΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…:

Расчёт ΠΏΠΎ слоТной ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π½ΠΎΠΉ ставкС ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ

Π”Π°Π²Π°ΠΉΡ‚Π΅ сразу посчитаСм ΠΎΠ±Ρ‰Π΅Π΅ количСство ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ΅ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ вычислСниС Π² Ρ†ΠΈΠΊΠ»Π΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠΈ СТСмСсячныС, Π° количСство Π»Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ 10, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ 120, ΠΈΠ»ΠΈ 10*12. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ мСсяца ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊ основной суммС.

Π’Π°ΠΊ выглядит ΠΊΠΎΠ΄:

ЕдинствСнноС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ этим ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ Π½Π° нСсколько вычислСний большС Π²ΠΎ врСмя ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π’Π°ΠΊΠΆΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎΡΡŒ число ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ с 5 Π΄ΠΎ 120.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π°ΡˆΠΈΡ… вычислСний:

Расчёт ΠΏΠΎ слоТной ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π½ΠΎΠΉ ставкС рСкурсивным способом

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π²Π½Π° 120, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ количСство Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° основная сумма пСрСсчитываСтся. Π¦ΠΈΠΊΠ» прСрываСтся ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. РСкурсивный ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт Π½Π°ΠΌ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ схоТим ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚.Π΅. ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ счётчик ΠΈ Π·Π°Π΄Π°Ρ‚ΡŒ Π΄Π²Π° условия.

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ вычислСниС слоТного ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСния ΠΊ ΠΎΠ±Ρ‰Π΅ΠΉ суммС. Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счётчика Π½Π° 1. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ дСйствия, подставив Π½ΠΎΠ²ΠΎΠ΅ значСния для счётчика ΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ суммы.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΎΠ±Ρ‰Π΅ΠΉ суммы

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Ρ†ΠΈΠΊΠ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ начинался со значСния 5 ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π»ΡΡ ΠΏΡ€ΠΈ 0.

Π—Π΄Π΅ΡΡŒ происходит Ρ‚ΠΎΠΆΠ΅ самоС, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ 120

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π»ΠΈΠ±ΠΎ снова Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π»ΠΈΠ±ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½Π½ΡƒΡŽ ΠΎΠ±Ρ‰ΡƒΡŽ сумму. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· вызывая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счётчика ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° 1. Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΎΠ±Ρ‰Π΅ΠΉ суммы происходит, ΠΊΠΎΠ³Π΄Π° счётчик Ρ€Π°Π²Π΅Π½ 0.

Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ

Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ рСкурсивным ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ языка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅, ΠΈΠ»ΠΈ ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ. НапримСр, Π² JavaScript рСкурсия ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкам stack frame errors, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€Π΅Π΄Π΅Π» стСка ΡƒΠΆΠ΅ достигнут, Π° Π±Π°Π·ΠΎΠ²ΠΎΠ΅ условиС Π΅Ρ‰Ρ‘ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅.

РассмотрСнный Π²Ρ‹ΡˆΠ΅ случай являСтся Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° рСкурсия Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ Ρ†ΠΈΠΊΠ».

Π”Π°Π²Π°ΠΉΡ‚Π΅ прСдставим, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΈΠΌΠΎ Ρ‚Π΅Ρ… чисСл, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ использовали Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅. НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎ, ΠΊΠ°ΠΊ рСгулярныС ΠΏΠ»Π°Ρ‚Π΅ΠΆΠΈ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° срок ΠΊΡ€Π΅Π΄ΠΈΡ‚Π°. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ» Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Если ΠΎΠ±Ρ‰Π΅Π΅ количСство Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π½Π°Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Ρ‹ ΠΏΠΎ ΠΊΡ€Π΅Π΄ΠΈΡ‚Ρƒ Ρ€Π°Π²Π½ΠΎ 120, Ρ‚ΠΎ ΠΈ Π΄Π»ΠΈΠ½Π° списка Ρ€Π°Π²Π½Π° 120. Но, Ссли сумма ΠΊΡ€Π΅Π΄ΠΈΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Π° 0 ΡƒΠΆΠ΅ послС 100 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ списка останСтся 20 Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… элСмСнтов списка. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° дальнСйшСго услоТнСния сцСнария Ρ†ΠΈΠΊΠ»Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ сумма ΠΊΡ€Π΅Π΄ΠΈΡ‚Π°, зависит ΠΎΡ‚ значСния Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π”Π΅Π»ΠΎ Π½Π΅ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это слоТно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это грязно.

Визуализация Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»

РСкурсивныС структуры Π΄Π°Π½Π½Ρ‹Ρ…

ИмСнно Π² Ρ‚Π°ΠΊΠΈΡ… случаях рСкурсивныС структуры Π΄Π°Π½Π½Ρ‹Ρ… особСнно ΠΏΠΎΠ»Π΅Π·Π½Ρ‹. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ рСкурсивной, Ссли Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… мСньшСй вСрсии самой сСбя. Бписок являСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ рСкурсивной структуры Π΄Π°Π½Π½Ρ‹Ρ….

НапримСр, Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ Ρ‚Π°ΠΊΠΎΠΉ список:

Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, сдСлаСм Π½Π° Π΅Π³ΠΎ основС Π΄Π²Π° ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… списка:

Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»

Если вывСсти ΠΎΠ±Π° списка, Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΠ² малСнькиС части большого списка, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (рСкурсия) ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅ΠΉ эти части (рСкурсивная структура Π΄Π°Π½Π½Ρ‹Ρ…).

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с вычислСниСм слоТного ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°:

Наша функция Π² основном состоит ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² if ΠΈ else. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ эту структуру Ссли понадобится, Π½ΠΎ ΠΎΠ½Π° ΠΈ Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ всё Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ. Π’ ΠΈΡ‚ΠΎΠ³Π΅, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΊΠ°ΠΆΡƒΡ‚ Π½Π°ΠΌ сумму ΠΊΡ€Π΅Π΄ΠΈΡ‚Π° ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ° Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° начисляСтся ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚.

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅:

Визуализация процСссов рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ». Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ быстрСС рСкурсия ΠΈΠ»ΠΈ Ρ†ΠΈΠΊΠ»

ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ рСкурсивном Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива ΠΈΠ· списка. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ значСния этого элСмСнта ΠΈ снова Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½ΠΎ Π½Π° этот Ρ€Π°Π· ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ Π΅ΠΉ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² array[:1] ΠΈ array[1:]. На ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ, достигнув сСрСдины списка, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π²Π΅ Π΅Π³ΠΎ части ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. А ΡƒΠΆΠ΅ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ ΠΌΡ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Π±Π΅Ρ€Ρ‘ΠΌ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌ всС элСмСнты ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ списка, ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΡ… Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ список. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ шаг Π·Π° шагом Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² ΠΊΠΎΠ΄Π΅.

Π¨Π°Π³ 1: создаём массив

На Π΄Π°Π½Π½ΠΎΠΌ этапС, наш массив ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ Ρ€Π°Π²Π½ΡƒΡŽ числу Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° начисляСтся ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт содСрТит ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ рСкурсивно.

Π¨Π°Π³ 2: создаём Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ условиС

Π‘Π°Π·ΠΎΠ²ΠΎΠ΅ условиС Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… сцСнария. Π›ΠΈΠ±ΠΎ счётчик достигнул ΠΊΠΎΠ½Ρ†Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ( len(inputArr) == 0 ), Π»ΠΈΠ±ΠΎ ΠΌΡ‹ погасили ΠΊΡ€Π΅Π΄ΠΈΡ‚ Ρ€Π°Π½ΡŒΡˆΠ΅ ( inputArr[-1][β€˜principal amount’] ).

Π¨Π°Π³ 3: создаём Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ else ΠΈ опрСдСляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ current, inputArray ΠΈ outputArray

Π¨Π°Π³ 4: Ссли массив outputArray пуст, Ρ‚ΠΎ Π±Π΅Ρ€Ρ‘ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΈΠ· массива Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π΅Π³ΠΎ Π² массив Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Π° массива выглядят ΠΊΠ°ΠΊ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π²Ρ‹ΡˆΠ΅, Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π¨Π°Π³ 5: Ссли массив Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ пуст, Ρ‚ΠΎ измСняСм всС значСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ элСмСнта.

Π¨Π°Π³ 6: добавляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ newCurrent ΠΊ массиву outputArray

Π¨Π°Π³ 7: Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с Π½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ

ΠœΡ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ! Π’Π°ΠΊ выглядит ΠΊΠΎΠ΄ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ:

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π·Π°Π΄ΡƒΠΌΠ°Π»ΠΈ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠΌ сумму ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ°.

Если ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сумму ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ° Π½Π° 2000, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅:

Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ чистый Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ использовании Ρ†ΠΈΠΊΠ»Π°. Если Π±Ρ‹ ΠΌΡ‹ использовали ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Ρ‚ΠΎ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС 120 элСмСнтов, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π»ΠΈ Π±Ρ‹ бСсполСзны/пусты.

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

На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд рСкурсия ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ слоТной. Но Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях, рСкурсивный ΠΌΠ΅Ρ‚ΠΎΠ΄ нСвСроятно эффСктивСн, Ссли всё ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΈΠ½ΠΎΠ³Π΄Π° Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»Ρ‹. ПониманиС ΠΎΠ±ΠΎΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΡƒΠΌΠ΅Π½ΠΈΠ΅ эффСктивно ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ прСимущСством Π½Π° собСсСдовании.

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

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

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