Автор | Сообщение |
|
Отправлено: 10.01.23 20:52. Заголовок: 16-134
Алгоритм вычисления функции F(n), где n – натуральное число, задан следующими соотношениями: F(n) = 1, если n = 1 F(n) = n · F(n – 1) + 1, если n > 1. Чему равно значение выражения F(3303) / F(3300)? В ответе укажите только целую часть числа. ## uses school; function f(n: integer):integer:=n=1?1:n>1?n*f(n-1)+1:0; print (f(3303)/f(3300)); ответ 1.45492734879547 целая часть 1 что не так? в ответах 36002376306
|
|
|
Ответов - 4
[только новые]
|
|
|
Отправлено: 11.01.23 06:43. Заголовок: F3303 = 3303 * F3302..
F3303 = 3303 * F3302 + 1 = 3303*(3302 * F3301 + 1) + 1 = 3303* (3302 * (3301 * F3300 + 1) + 1) + 1 = 3303* 3302 * 3301 * F3300 + 3303 * 3302 + 3303 + 1 = ... Не сократится это по-хорошему. Поскольку тут считается факториал, то первое слагаемое - произведение чисел - будет много больше остальных. Задача не на ручное решение, видимо. Динамикой на питоне прекрасно решается. f = [0] * 5000 for n in range(3304): if n == 1: f[n] = 1 else: f[n] = n * f[n - 1] + 1 print(f[3303] / f[3300]) А в своем решении Вы ошиблись в выборе типа данных ## uses school; function f(n: integer):BigInteger:=n=1?1:n>1?n*f(n-1)+1:0; print (f(3303)/f(3300)); Номер задания 5540.
|
|
|
|
Отправлено: 02.05.23 08:58. Заголовок: MrAndrewson пишет: ..
MrAndrewson пишет: цитата: | F3303 = 3303 * F3302 + 1 = 3303*(3302 * F3301 + 1) + 1 = 3303* (3302 * (3301 * F3300 + 1) + 1) + 1 = 3303* 3302 * 3301 * F3300 + 3303 * 3302 + 3303 + 1 = ... Не сократится это по-хорошему.. |
| Зачем не сократиться, а если так: f(3303) = 3303*f(3202)+1 f(3302) = 3302*f(3301)+1 f(3301) = 3301*f(3300)+1 f(3300) = 3300*f(3299)+1 F(3303) / F(3300) = (3303*3302*3301* 3300*f(3299)+1)/( 3300*f(3299)+1) = 36 002 376 306
|
|
|
|
Отправлено: 02.05.23 09:00. Заголовок: MrAndrewson пишет: ..
MrAndrewson пишет: цитата: | Задача не на ручное решение, видимо. Динамикой на питоне прекрасно решается. |
| Можно и так: import sys sys.setrecursionlimit( 10000 ) def f( n ): if n == 1: return 1 else : return n*f(n-1) +1 print( f(3303) // f(3300) ) # или даже так: x = 1 for n in range(3303, 3300, -1): x *= n print( x )
|
|
|
|
Отправлено: 11.01.23 11:49. Заголовок: спасибо большое..
спасибо большое
|
|
|
|