ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°

Алгоритмы быстрого вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°

ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° извСстно всСм. Π­Ρ‚ΠΎ функция, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ N Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: N! = 1 * 2 * 3 *… * N. Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» β€” быстрорастущая функция, ΡƒΠΆΠ΅ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ N Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ N! ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… Ρ†ΠΈΡ„Ρ€.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π° языкС программирования. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ язык, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π΄Π»ΠΈΠ½Π½ΡƒΡŽ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΡƒ. Π― Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡΡŒ C#, Π½ΠΎ с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ успСхом ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ Java ΠΈΠ»ΠΈ Python.

Π˜Ρ‚Π°ΠΊ, ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ°Ρ рСализация (Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π΅ Π½Π°ΠΈΠ²Π½ΠΎΠΉ) получаСтся прямо ΠΈΠ· опрСдСлСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°:

На ΠΌΠΎΠ΅ΠΉ машинС эта рСализация Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 1,6 сСкунд для N=50 000.

Π”Π°Π»Π΅Π΅ рассмотрим Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС Π½Π°ΠΈΠ²Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Алгоритм вычислСния Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ основан Π½Π° Ρ‚ΠΎΠΌ сообраТСнии, Ρ‡Ρ‚ΠΎ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ числа ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΡƒΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒ эффСктивнСС, Ρ‡Π΅ΠΌ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ число ΡƒΠΌΠ½ΠΎΠΆΠ°Ρ‚ΡŒ Π½Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ (ΠΊΠ°ΠΊ Π² Π½Π°ΠΈΠ²Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ). Π’ΠΎ Π΅ΡΡ‚ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ вычислСнии Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΠΈ постоянно Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹.

ΠŸΡƒΡΡ‚ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ L Π΄ΠΎ R, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌ Π΅Π³ΠΎ ΠΊΠ°ΠΊ P(L, R). Π Π°Π·Π΄Π΅Π»ΠΈΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΎΡ‚ L Π΄ΠΎ R ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ ΠΈ посчитаСм P(L, R) ΠΊΠ°ΠΊ P(L, M) * P(M + 1, R), Π³Π΄Π΅ M находится посСрСдинС ΠΌΠ΅ΠΆΠ΄Ρƒ L ΠΈ R, M = (L + R) / 2. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. Аналогично Ρ€Π°Π·ΠΎΠ±ΡŒΠ΅ΠΌ P(L, M) ΠΈ P(M + 1, R). Π‘ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΏΠΎΠΊΠ° Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ останСтся Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡƒΡ… ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»Π΅ΠΉ. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ P(L, R) = L, Ссли L ΠΈ R Ρ€Π°Π²Π½Ρ‹, ΠΈ P(L, R) = L * R, Ссли L ΠΈ R ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ N! Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ P(2, N).

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ наш Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ для N=10, Π½Π°ΠΉΠ΄Π΅ΠΌ P(2, 10):

P(2, 10)
P(2, 6) * P(7, 10)
( P(2, 4) * P(5, 6) ) * ( P(7, 8) * P(9, 10) )
( (P(2, 3) * P(4) ) * P(5, 6) ) * ( P(7, 8) * P(9, 10) )
( ( (2 * 3) * (4) ) * (5 * 6) ) * ( (7 * 8) * (9 * 10) )
( ( 6 * 4 ) * 30 ) * ( 56 * 90 )
( 24 * 30 ) * ( 5 040 )
720 * 5 040
3 628 800

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ своСобразноС Π΄Π΅Ρ€Π΅Π²ΠΎ, Π³Π΄Π΅ ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΠΈ находятся Π² ΡƒΠ·Π»Π°Ρ…, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ получаСтся Π² ΠΊΠΎΡ€Π½Π΅
ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. image loader. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° извСстно всСм. Π­Ρ‚ΠΎ функция, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ N Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: N! = 1 * 2 * 3 *… * N. Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» β€” быстрорастущая функция, ΡƒΠΆΠ΅ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ N Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ N! ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… Ρ†ΠΈΡ„Ρ€.

Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ описанный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ:

Для N=50 000 Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» вычисляСтся Π·Π° 0,9 сСкунд, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ Π²Π΄Π²ΠΎΠ΅ быстрСС, Ρ‡Π΅ΠΌ Π² Π½Π°ΠΈΠ²Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Алгоритм вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ

Для наглядности посчитаСм, сколько Ρ€Π°Π· Π΄Π²ΠΎΠΉΠΊΠ° содСрТится Π² 10! Π”Π²ΠΎΠΉΠΊΡƒ Π΄Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ (2, 4, 6, 8 ΠΈ 10), всСго Ρ‚Π°ΠΊΠΈΡ… ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»Π΅ΠΉ 10 / 2 = 5. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ Ρ‡Π΅Ρ‚Π²Π΅Ρ€ΠΊΡƒ (2 2 ), всСго Ρ‚Π°ΠΊΠΈΡ… ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»Π΅ΠΉ 10 / 4 = 2 (4 ΠΈ 8). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ восьмой Π΄Π°Π΅Ρ‚ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΊΡƒ (2 3 ), Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ всСго ΠΎΠ΄ΠΈΠ½ 10 / 8 = 1 (8). Π¨Π΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΡŒ (2 4 ) ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡƒΠΆΠ΅ Π½Π΅ Π΄Π°Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ, Π·Π½Π°Ρ‡ΠΈΡ‚, подсчСт ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ. Буммируя, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ стСпСни ΠΏΡ€ΠΈ Π΄Π²ΠΎΠΉΠΊΠ΅ Π² Ρ€Π°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ 10! Π½Π° простыС ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ 10 / 2 + 10 / 4 + 10 / 8 = 5 + 2 + 1 = 8.

Если Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΏΡ€ΠΈ 3, 5 ΠΈ 7 Π² Ρ€Π°Π·Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ 10!, послС Ρ‡Π΅Π³ΠΎ остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ произвСдСния:

10! = 2 8 * 3 4 * 5 2 * 7 1 = 3 628 800

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ простыС числа ΠΎΡ‚ 2 Π΄ΠΎ N, для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Ρ‚ΠΎ ЭратосфСна:

Π­Ρ‚Π° рСализация Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 0,9 сСкунд Π½Π° вычислСниС 50 000!

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

ВсС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ для N Ρ€Π°Π²Π½ΠΎΠΌ 1 000, 2 000, 5 000, 10 000, 20 000, 50 000 ΠΈ 100 000 Π΄Π΅ΡΡΡ‚ΡŒΡŽ итСрациями. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² миллисСкундах.
ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. image loader. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° извСстно всСм. Π­Ρ‚ΠΎ функция, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ N Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: N! = 1 * 2 * 3 *… * N. Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» β€” быстрорастущая функция, ΡƒΠΆΠ΅ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ N Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ N! ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… Ρ†ΠΈΡ„Ρ€.

Π“Ρ€Π°Ρ„ΠΈΠΊ с Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ шкалой
ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. image loader. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° извСстно всСм. Π­Ρ‚ΠΎ функция, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ N Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: N! = 1 * 2 * 3 *… * N. Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» β€” быстрорастущая функция, ΡƒΠΆΠ΅ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ N Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ N! ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… Ρ†ΠΈΡ„Ρ€.

Π“Ρ€Π°Ρ„ΠΈΠΊ с логарифмичСской шкалой
ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. image loader. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° извСстно всСм. Π­Ρ‚ΠΎ функция, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ N Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: N! = 1 * 2 * 3 *… * N. Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» β€” быстрорастущая функция, ΡƒΠΆΠ΅ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ N Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ N! ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… Ρ†ΠΈΡ„Ρ€.

ИдСи ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈΠ· ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²

Π₯Π°Π±Ρ€Π°ΠΆΠΈΡ‚Π΅Π»ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ»ΠΈ Π½Π΅ΠΌΠ°Π»ΠΎ интСрСсных ΠΈΠ΄Π΅ΠΉ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° мою ΡΡ‚Π°Ρ‚ΡŒΡŽ, здСсь я ΠΎΡΡ‚Π°Π²Π»ΡŽ ссылки Π½Π° Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ…

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΠΎΠ΄ спойлСрами

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

Как Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» Π² Python?

Как Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» Π² Python?

Π‘Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» Π² Python Π»Π΅Π³ΠΊΠΎ, Ссли Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ питоновская ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ‰Π΅Π»ΠΊΠ°ΡŽΡ‰Π°Ρ матСматичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΎΡ€Π΅ΡˆΠΊΠΈ. Однако, ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ Python ΠΏΠΎΡ€Π°Π΄ΡƒΠ΅Ρ‚ нас ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ рассчСтами, придСтся Π½Π°ΠΌ ΠΏΠΎΡ€Π°Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠŸΠΈΡ‚ΠΎΠ½Π° Π½ΠΎΠ²ΠΎΠΉ ΠΏΠΎΡ€Ρ†ΠΈΠ΅ΠΉ ΠΎΡ‚ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Β«Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»!Β». Но, сначала ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ матСматичСский Π»ΠΈΠΊΠ±Π΅Π·:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» числа?

Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»ΠΎΠΌ числа N называСтся ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ всСх чисСл ΠΎΡ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Π΄ΠΎ N. О Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π΅, Β«Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Β» Π²ΠΎΡΠΊΠ»ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π½Π°ΠΊ послС числа N.

НапримСр, Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» 5 считаСтся Ρ‚Π°ΠΊ: 5! = 1*2*3*4*5
А Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» 12 Ρ€Π°Π²Π΅Π½: 12! = 1*2*3*4*5*6*7*8*9*10*11*12.

ΠšΡΡ‚Π°Ρ‚ΠΈ, Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» нуля Ρ€Π°Π²Π΅Π½ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅, ΠΊΠ°ΠΊ ΠΈ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» самой Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹: 0! = 1 1! = 1
Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡ‚ΡŒ Π² своСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅!

ПишСм ΠΊΠΎΠ΄ Π½Π° Python для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! ΠŸΡ€ΠΈ написании ΠΊΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ нСльзя Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» Π½Π΅Ρ†Π΅Π»ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ числа. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ!

Рассмотрим нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² написания ΠΊΠΎΠ΄Π°:

1. CΠ°ΠΌΡ‹ΠΉ простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ†ΠΈΠΊΠ» for, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π½Π° Π²Ρ…ΠΎΠ΄ число n ΠΈ выводящий Π² ΠΎΡ‚Π²Π΅Ρ‚ посчитанный Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π». Если число n являСтся Π½Π΅Ρ†Π΅Π»Ρ‹ΠΌ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ сообщСниС ΠΎΠ± ΠΎΡ‰ΠΈΠ±ΠΊΠ΅. Π’ качСствС Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠΈ, послС Π½Π΅Π³ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΡƒΡΠ»ΠΎΠΆΠ½ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ» Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠ°ΠΊ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅.

2. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” это функция для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ число n. Π­Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ являСтся «причСсанным» ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ.

3. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” это ΠΎΠ±Π»Π°Π³ΠΎΡ€ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ 2-ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Помимо Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ вычислСниС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊ Π΅Ρ‰Π΅ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° любСзно «попросит» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ввСсти число, Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ.

Π˜Ρ‚Π°ΠΊ, приступим ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄ΡƒΠΌΠ°Π½Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²!

Π’ΠΠ Π˜ΠΠΠ’ β„–1: ПишСм Ρ†ΠΈΠΊΠ» for для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π² Python!

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ сначала Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠΎΠ΄. ПозТС ΠΌΡ‹ рассмотрим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ шаг ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ:

ΠŸΡ€ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ num=5, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠ΄Π° выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

А ΠΏΡ€ΠΈ Π½Π΅Ρ†Π΅Π»ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ 3.2:

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠΎΠ΄ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° β„–1 ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ:

1. ОбъявляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ num ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΅ΠΉ число, Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ трСбуСтся Π½Π°ΠΉΡ‚ΠΈ:

2. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ factorial, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вычислСнного Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. Π’ качСствС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния устанавливаСм Β«1Β»

3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, Π²Π΅Ρ€Π½ΠΎ Π»ΠΈ Π·Π°Π΄Π°Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ num. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²Π΅Π» Π½Π΅Ρ†Π΅Π»ΠΎΠ΅ число, Ρ‚ΠΎΠ³Π΄Π° остаток ΠΎΡ‚ дСлСния этого Π½Π΅Ρ†Π΅Π»ΠΎΠ³ΠΎ числа Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π±ΡƒΠ΄Π΅Ρ‚ большС нуля.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Β«%Β» Π² Python позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ остаток ΠΎΡ‚ дСлСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ числа Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠ΅. НапримСр, 5%1 =0, Π° 5.5%1 = 0.5

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ num, Ρ†Π΅Π»Ρ‹ΠΌ, Π½ΡƒΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ num%1 с Π½ΡƒΠ»Π΅ΠΌ. ΠšΡ€ΠΎΠΌΠ΅ этого, Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ число num Π½Π΅ являСтся ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, для этого ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ нСравСнства num >= 0:

Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ пСрСчислСнных Π²Ρ‹ΡˆΠ΅ условий:

4. Вычислим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° числа num. Для Ρ†Π΅Π»ΠΎΠ³ΠΎ числа i, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π³ΠΎ Ρ†Π΅Π»Ρ‹Π΅ значСния ΠΎΡ‚ 1(Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ) Π΄ΠΎ n+1(Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ), Π±ΡƒΠ΄Π΅ΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π½Π° i ΠΈ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Ρƒ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΏΡ€ΠΈ расчСтС 4! Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ дСйствия:

5. Π’Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π½Π° экран осущСствим Π² Π²ΠΈΠ΄Π΅ строки:

Вакая конструкция (с Π±ΡƒΠΊΠ²ΠΎΠΉ f ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ) позволяСт вывСсти Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки. Π’ ΠΈΡ‚ΠΎΠ³Π΅, ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π΅Ρ‚ Π²ΠΈΠ΄:

Π’ΠΠ Π˜ΠΠΠ’ β„–2: Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°!

1. Для Π½Π°Ρ‡Π°Π»Π° объявим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ find_factorial(num), которая Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ число, Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ трСбуСтся Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ:

2. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для хранСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ значСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°, присваиваСм Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«1Β»:

3. Π—Π°Ρ‚Π΅ΠΌ, вСсь написанный Π² Β«Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ β„–1Β» ΠΊΠΎΠ΄, начиная с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ num, ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ find_factorial(num). ΠŸΡ€ΠΈ этом Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Β«printΒ» Π½Π° Β«returnΒ», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ функция Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° экран, Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° ΠΈΠ»ΠΈ сообщСниС ΠΎΠ± ошибкС:

Если ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² ΠΊΠΎΠ΄Π΅ для Вас Π½Π΅ понятСн, ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·Π±ΠΎΡ€ ΠΊΠΎΠ΄Π° Π² Β«Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ 1Β»

4. ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π»ΠΈ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Для этого ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ число, Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ find_factorial() для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° числа num. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚Π²Π΅Ρ‚ сохраним Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ factorial ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π½Π° экран:

Наша функция ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠΌ Π² самописной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ для матСматичСских вычислСний! Однако, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ наш ΠΊΠΎΠ΄ нСбольшой изюминкой, Ρ‡Π΅ΠΌ ΠΈ займСмся ΠΏΡ€ΠΈ рассмотрСнии Β«Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Π° β„–3Β».

Π’ΠΠ Π˜ΠΠΠ’ β„–3: ΠžΠ±Π»Π°Π³ΠΎΡ€ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠ΄, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» Π² Python, строкой ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ скрипту интСрактивности β€” Π²Π΅ΠΆΠ»ΠΈΠ²ΠΎ попросим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ввСсти число, Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ. Π—Π°Ρ‚Π΅ΠΌ, послС Π²Π²ΠΎΠ΄Π° числа ΠΈ наТатия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ клавиши Β«EnterΒ», обратимся ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ find_factorial() ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° экран. Для этого трСбуСтся лишь Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ строку, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π·Π°Π΄Π°Π²Π°Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ num, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкой:

Ѐункция input() Π² Python3 позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Π²Π΅Π΄Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

Ѐункция eval() позвляСт динамичСски ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.

Π’ ΠΈΡ‚ΠΎΠ³Π΅, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ΠœΡ‹ рассмотрСли 3 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°, ΠΎΡ‚ самого простого, Π΄ΠΎ самого Β«ΠΎΠ±Π»Π°Π³ΠΎΡ€ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎΒ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡŽ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π² Python. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ эта Π·Π°Π΄Π°Ρ‡Π° являСтся довольно простой, ΠΎΠ½Π° ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π°Π²Ρ‹ΠΊΠΎΠ² программирования Π² Python!

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

ΠŸΡΡ‚Π½ΠΈΡ‡Π½Ρ‹ΠΉ JS: СдинствСнно Π²Π΅Ρ€Π½Ρ‹ΠΉ способ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ВычислСниС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° β€” ΠΎΠ΄Π½Π° ΠΈΠ· Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… программистских Π·Π°Π΄Π°Ρ‡ для собСсСдований. Если Π²Π΄Ρ€ΡƒΠ³ ΠΊΡ‚ΠΎ Π·Π°Π±Ρ‹Π», Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ числа N обозначаСтся ΠΊΠ°ΠΊ N! ΠΈ равняСтся ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡŽ всСх Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Π΄ΠΎ N Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. НапримСр, ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. 3584ca3e9a6170a9da7586a9108c90a9. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°-3584ca3e9a6170a9da7586a9108c90a9. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 3584ca3e9a6170a9da7586a9108c90a9. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° извСстно всСм. Π­Ρ‚ΠΎ функция, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ N Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: N! = 1 * 2 * 3 *… * N. Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» β€” быстрорастущая функция, ΡƒΠΆΠ΅ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ N Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ N! ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… Ρ†ΠΈΡ„Ρ€.. Казалось Π±Ρ‹, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ слоТного? Однако Π΅ΡΡ‚ΡŒ свои Π½ΡŽΠ°Π½ΡΡ‹.

НапримСр, сравним Π΄Π²Π° самых распространённых способа вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°.

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

Π’ любом случаС, ΠΎΠ±Π° эти способа слишком ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎ Π½ΠΈΠΌ ΡΡƒΠ΄ΠΈΡ‚ΡŒ ΠΎ знаниях ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π°. А Π²ΠΎΡ‚ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π° React.js ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² этом Ρ€ΠΎΠ΄Π΅:

Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, выглядит Π³ΠΎΡ€Π°Π·Π΄ΠΎ солиднСС. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, Π½Π΅Π²ΠΎΠΎΡ€ΡƒΠΆΡ‘Π½Π½Ρ‹ΠΌ Π³Π»Π°Π·ΠΎΠΌ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ это всСго лишь Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ рСкурсивного вычислСния. Бходство станСт Π΅Ρ‰Ρ‘ сильнСС, Ссли ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Factorial ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. И, разумССтся, я Π½Π΅ стал Π±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ этот хабрапост, Ссли Π±Ρ‹ Π½Π΅ Π±Ρ‹Π» Π³ΠΎΡ‚ΠΎΠ² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π½ΠΎΠ²ΠΎΠ΅.

Начнём ΠΈΠ·Π΄Π°Π»Π΅ΠΊΠ°

ΠšΠ°ΠΊΡƒΡŽ ΠΈΠ· возмоТностСй Javascript Π½Π΅Π΄ΠΎΠ»ΡŽΠ±Π»ΠΈΠ²Π°ΡŽΡ‚ ΠΈ Π½Π΅Π΄ΠΎΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‚ сильнСС всСго? ΠΠ΅Π΄ΠΎΠ»ΡŽΠ±Π»ΠΈΠ²Π°ΡŽΡ‚ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎ Π½Π΅Ρ‘ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΡƒ? ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, это eval. МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ eval β€” это тёмная сторона Π‘ΠΈΠ»Ρ‹. А ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΈΠ· Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ² Π”ΠΆΠΎΡ€Π΄ΠΆΠ° Лукаса, Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΡ‚ΠΎΠ³ΠΎ ΠΈ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»ΡΡŽΡ‰Π΅Π³ΠΎ, Ρ‡Π΅ΠΌ тёмная сторона Π‘ΠΈΠ»Ρ‹, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅ΠΉ ΠΎΠ²Π»Π°Π΄Π΅Ρ‚ΡŒ.

МоТно Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°ΠΏΠΈΡ…Π½ΡƒΡ‚ΡŒ Π² строку ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Ρ… Π² Π½Π°Ρ‡Π°Π»Π΅ поста, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ эту строку Π² eval, Π½ΠΎ Π² этом Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½ΠΎΠ²ΠΈΠ·Π½Ρ‹. ΠŸΠΎΡΡ‚Π°Π²ΠΈΠΌ Π·Π°Π΄Π°Ρ‡Ρƒ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ этот Ρ…Π°ΠΊ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ. ΠŸΡƒΡΡ‚ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΎΡ‚ каркас:

β€” ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, внСся измСнСния лишь Π² Π»ΠΈΡ‚Π΅Ρ€Π°Π» строки f, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ функция factorial Π²Π·Π°ΠΏΡ€Π°Π²Π΄Ρƒ вычисляла Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π». Π’ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡Π°, достойная истинного ситха.

Π§Ρ‚ΠΎ-Ρ‚ΠΎ это Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚

Нам Π½ΡƒΠΆΠ΅Π½ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ код… Если Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ β€” вычислСниС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстная ΡˆΡ‚ΡƒΠΊΠ°, которая Π½Π°ΠΌ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚. Π­Ρ‚Π° ΡˆΡ‚ΡƒΠΊΠ° называСтся ΠΊΠ²Π°ΠΉΠ½ β€” ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ свой собствСнный тСкст.

ΠŸΡ€ΠΎ ΠΊΠ²Π°ΠΉΠ½Ρ‹ Π½Π° Π₯Π°Π±Ρ€Π΅ написано ΡƒΠΆΠ΅ Π½Π΅ΠΌΠ°Π»ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ я напомню лишь основныС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΊΠ²Π°ΠΉΠ½ΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΊΠ²Π°ΠΉΠ½, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ:

Π’ строкС o.s содСрТится вСсь ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ΄, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ подстановочныС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с подчёркивания. Π‘Ρ‚Ρ€Π°ΡˆΠ½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ console.log замСняСт ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΏΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΎΡ‡Π½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ свойство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° o, Ρ‡Ρ‚ΠΎ обСспСчиваСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ² 2 ΠΈ 3 Ρ…ΠΈΡ‚Ρ€ΠΎΠ³ΠΎ ΠΏΠ»Π°Π½Π° ΠΏΠΎ созданию ΠΊΠ²Π°ΠΉΠ½Π°.

Π—Π΄Π΅ΡΡŒ мСня ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ: Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ‰, это Π½Π΅ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΊΠ²Π°ΠΉΠ½, Π° монстр ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΊΠ²Π°ΠΉΠ½ Π½Π° js выглядит Ρ‚Π°ΠΊ:

Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²Π΄Π°, Π½ΠΎ Π½Π΅ совсСм. Π’Π°ΠΊΠΎΠΉ ΠΊΠ²Π°ΠΉΠ½ считаСтся «читСрским», ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΈΠ· Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊ Π΅Ρ‘ ΠΆΠ΅ тСксту. Π­Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ с Тёсткого диска Ρ„Π°ΠΉΠ» с исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠœΠΎΠ²Π΅Ρ‚ΠΎΠ½, ΠΎΠ΄Π½ΠΈΠΌ словом.

Π‘ΠΊΡ€Π΅Ρ‰ΠΈΠ²Π°Π΅ΠΌ Π΅ΠΆΠ° с ΡƒΠΆΠΎΠΌ

Как ΠΆΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ наш ΠΊΠ²Π°Π·ΠΈ-ΠΊΠ²Π°ΠΉΠ½ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π» сам сСбя, Π° Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ прСвратился Π² ΠΎΠ΄Π½ΠΎ-СдинствСнноС число? Π”Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΎ вычислСниС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° ΠΈ постараСмся просто Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ строку, которая «схлопываСтся» Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ количСство eval’ΠΎΠ². Для этого Π½Π°ΠΌ понадобится:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° отсутствиС return Π²Π½ΡƒΡ‚Ρ€ΠΈ строки: Π² Π½Ρ‘ΠΌ Π½Π΅Ρ‚ нСобходимости, eval Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ послСднСго выраТСния. Запустив этот ΠΊΠΎΠ΄ Π² консоли, ΠΌΠΎΠΆΠ½ΠΎ c Π±Π»Π°Π³ΠΎΠ³ΠΎΠ²Π΅Π½ΠΈΠ΅ΠΌ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Ρ†ΠΈΠΊΠ»Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ n ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π½Π° 1. Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ скаТСт, Ρ‡Ρ‚ΠΎ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ эффСкта достаточно:

β€” Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ чувства прСкрасного.

ПослС этого ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ этапа ΡƒΠΆΠ΅ совсСм Π½Π΅Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ΠŸΡ€ΠΎΡΡ‚ΠΎ добавляСтся Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Π° пСрСмСнная ΠΈ Ρ‡ΡƒΡ‚ΡŒ услоТняСтся строчка с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ смСло ΠΈΠ΄Ρ‚ΠΈ Π½Π° собСсСдованиС.

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

Π‘ ΠΆΠΈΠ²Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒΡΡ здСсь. Как ΠΈ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΈΠ· Ρ€ΡƒΠ±Ρ€ΠΈΠΊΠΈ Β«ΠŸΡΡ‚Π½ΠΈΡ‡Π½Ρ‹ΠΉ JSΒ» напоминаю: Ссли Π²Ρ‹ сдСлаСтС Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅, Ρ‚ΠΎ ΠΏΠΎΠΏΠ°Π΄Ρ‘Ρ‚Π΅ Π² Π°Π΄. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ссли Π²Ρ‹ сдСлаСтС это Π½Π° собСсСдовании, Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ Π΄Π°Π΄ΡƒΡ‚ возмоТности ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅, ΠΈ Π²Ρ‹ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Ρ‘Ρ‚Π΅ Π² Π°Π΄. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°ΠΉΡ‚Π΅ это Π½Π° собСсСдовании. Бпасибо Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅.

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

Магия шаблонов ΠΈΠ»ΠΈ вычислСниС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π½Π° стадии компиляции

Π”ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ суток, Π₯Π°Π±Ρ€Π°Π»ΡŽΠ΄ΠΈ!

Π“ΡƒΡ€Ρƒ C++, Π° Ρ‚Π°ΠΊΠΆΠ΅ люди смыслящиС Π² шаблонном ΠΌΠ΅Ρ‚Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ смСло ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ этот Ρ‚ΠΎΠΏΠΈΠΊ, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ для сСбя ΠΎΠ½ΠΈ здСсь Π½Π΅ Π½Π°ΠΉΠ΄ΡƒΡ‚. Однако, Ссли послС прочтСния Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°, Ρƒ вас Π² Π³ΠΎΠ»ΠΎΠ²Π΅ Π΅Ρ‰Π΅ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ (ΠΈ Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ, Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ шаблонов), Ρ‚ΠΎ милости просим ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.

БобствСнно, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ:

Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся, Ρ‡Ρ‚ΠΎ ΠΊ Ρ‡Π΅ΠΌΡƒ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ β€” Π° ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вычисляСтся Π½Π° стадии компиляции? ΠžΡ‚Π²Π΅Ρ‚ β€” это основа шаблонов Π² C++. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ гСнСрируСтся Π½Π° стадии компиляции, Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π» ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½ шаблон. Π‘ΡƒΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, шаблон Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π΄Π²ΡƒΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

Π’ΠΎ Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ΠΎ сгСнСрируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ спСциализация для Ρ‚ΠΈΠΏΠ° int. А Ссли Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:

Π’ΠΎ сгСнСрируСтся спСциализация для double.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Ρƒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ шаблона Factorial Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ шаблон Factorial ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ Π΄ΠΎ нуля, Π³Π΄Π΅ Π² Factorial ::f записываСтся просто Π΅Π΄ΠΈΠ½ΠΈΡ†Π° (Π·Π° счСт явной спСциализации template<>). Π­Ρ‚ΠΎΡ‚ послСдний шаг останавливаСт Β«Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽΒ» Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ шаблонов, послС Ρ‡Π΅Π³ΠΎ вычисляСтся само Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π° стадии компиляции? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ константа static const int f являСтся константой Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции. Если ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Π²Π΅Ρ€ΠΈΡ‚ Π² это, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ шаблона Π² качСствС Π΄Π»ΠΈΠ½Ρ‹ массива, ΠΈ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΡΠΏΠΎΠΊΠΎΠΉΠ½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ ΠΊΠ½ΠΈΠ³Π΅ Π‘Ρ€ΡŽΡΠ° ЭккСля Ѐилософия Π‘++. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠŸΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой Π·Π°Π΄Π°Ρ‡ΠΈ (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎ сути Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ отличаСтся ΠΎΡ‚ Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ):

Π’ΠΎΠΎΠ±Ρ‰Π΅, Ρ‚Π°ΠΊΠΎΠ΅ вычислСниС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° являСтся частным случаСм шаблонного мСтапрограммирования. НапримСр, Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ q, Ρ†Π΅Π»ΠΎΠ³ΠΎ числа p, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»ΠΎΠΌ:

Но Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ шаблонного мСтапрограммирования:

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ± этом ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρƒ ЭккСля, Π² ΠΊΠ½ΠΈΠ³Π΅ Ѐилософия Π‘++. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈΠ»ΠΈ Ρƒ АлСксандрСску Π² ΠΊΠ½ΠΈΠ³Π΅ Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C++.

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

ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°

ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ…, курсовых ΠΈ Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚ здСсь.

ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°
И Π΅Ρ‰Π΅ Π²ΠΎΡ‚ эти Π΄Π²Π΅ поТалуйста. 2. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° (Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»ΠΎΠΌ Ρ†Π΅Π»ΠΎΠ³ΠΎ.

ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°
1. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ΠΏΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ

ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ ΠΎΡ‚Π²Π΅Ρ‚ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°
Π”ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ суток. НуТно Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ Π·Π°Π΄Π°Ρ‡ΠΊΠΈ. Π― с Π‘++ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСйчас. 2)ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ.

ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. tick. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°-tick. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° tick. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° извСстно всСм. Π­Ρ‚ΠΎ функция, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ N Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: N! = 1 * 2 * 3 *… * N. Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» β€” быстрорастущая функция, ΡƒΠΆΠ΅ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ N Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ N! ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… Ρ†ΠΈΡ„Ρ€.ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ значСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»ΠΎΠ² чисСл ΠΎΡ‚ 0 Π΄ΠΎ N. Для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° числа Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ значСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»ΠΎΠ² чисСл ΠΎΡ‚ 0 Π΄ΠΎ N. Для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°.

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ качСство! это ΠΆΠ΅ Π³Π»Π°Π²Π½Ρ‹ΠΉ Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π»ΡŒ прогрСсса!
МнС Π²ΠΎΡ‚ Ρ‚ΠΎΠΆΠ΅ лСнь Ρ‡Π΅Π³ΠΎ-Π΄Π΅Π»Π°Ρ‚ΡŒ самому. Π‘ΠΈΠΆΡƒ сСбС Π½Π° ΠΏΠ΅Π½Π΅Ρ‡ΠΊΠ΅, ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽ. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ag. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°-ag. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ag. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° извСстно всСм. Π­Ρ‚ΠΎ функция, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ N Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: N! = 1 * 2 * 3 *… * N. Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» β€” быстрорастущая функция, ΡƒΠΆΠ΅ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ N Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ N! ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… Ρ†ΠΈΡ„Ρ€.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· 6 ΠΌΠΈΠ½ΡƒΡ‚

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· 3 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· 7 ΠΌΠΈΠ½ΡƒΡ‚
Π’ΠΎΠ³Π΄Π° Ρ‚Π°ΠΊ

БогласСн. Но Π² Π’Π— сказано Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Бкучная Π·Π°Π΄Π°Ρ‡Π°: Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Ρ‹, Π²Π»Π΅Π·Π°ΡŽΡ‰ΠΈΠ΅ Π² стандартныС Ρ‚ΠΈΠΏΡ‹, быстро закончатся, сработаСт любоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² Π»ΠΎΠ±. НС понятно, Ρ‡Π΅ΠΌΡƒ Ρ‚ΡƒΡ‚ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ, Ρ€Π΅ΡˆΠ°Ρ Π΅Ρ‘.

ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ…, курсовых ΠΈ Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚ здСсь.

ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. tick. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°-tick. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° tick. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° извСстно всСм. Π­Ρ‚ΠΎ функция, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ N Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: N! = 1 * 2 * 3 *… * N. Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» β€” быстрорастущая функция, ΡƒΠΆΠ΅ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ N Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ N! ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… Ρ†ΠΈΡ„Ρ€.ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ вычислСния суммы: 1! + 2! + 3! + … + n!, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° числа k.
ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ вычислСния суммы: 1! + 2! + 3! + … + n!, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°.

ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. tick. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°-tick. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° tick. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° извСстно всСм. Π­Ρ‚ΠΎ функция, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ N Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: N! = 1 * 2 * 3 *… * N. Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» β€” быстрорастущая функция, ΡƒΠΆΠ΅ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ N Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ N! ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… Ρ†ΠΈΡ„Ρ€.Π Π΅Π°Π»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π€ΡƒΠ½ΠΊΡ†ΠΈΡŽ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° числа
Ѐункция вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° числа..

ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°
1. Для Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ числа n Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ вычислСния Π΅Π³ΠΎ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°: n! = 1*2* … *n.

ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. tick. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°-tick. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° tick. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° извСстно всСм. Π­Ρ‚ΠΎ функция, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ N Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: N! = 1 * 2 * 3 *… * N. Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» β€” быстрорастущая функция, ΡƒΠΆΠ΅ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ N Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ N! ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… Ρ†ΠΈΡ„Ρ€.ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°
ΠŸΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅! Π·Π°Ρ€Π°Π½Π΅Π΅ спасибо!

ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. tick. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°-tick. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° tick. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° извСстно всСм. Π­Ρ‚ΠΎ функция, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ N Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: N! = 1 * 2 * 3 *… * N. Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» β€” быстрорастущая функция, ΡƒΠΆΠ΅ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ N Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ N! ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… Ρ†ΠΈΡ„Ρ€.ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° числа
1) Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° числа n!=1*2*3. *n. Число n вводится с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. tick. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Ρ„ΠΎΡ‚ΠΎ. ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°-tick. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΊΠΎΠ΄ для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° tick. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° извСстно всСм. Π­Ρ‚ΠΎ функция, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹Ρ… чисСл ΠΎΡ‚ 1 Π΄ΠΎ N Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ: N! = 1 * 2 * 3 *… * N. Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» β€” быстрорастущая функция, ΡƒΠΆΠ΅ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ N Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ N! ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π°Ρ‰ΠΈΡ… Ρ†ΠΈΡ„Ρ€.ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для вычислСния Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° числа
2) Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ для вычислСния Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° числа n!!=n*(n-2)*(n-4)*(n-6). Число n.

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

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

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