Форум » Рекурсивные процедуры и функции » задание 16, № 2266 » Ответить

задание 16, № 2266

Pavlova21: (№ 2266) (К. Амеличев) Алгоритм вычисления функции F(n) задан следующими соотношениями: F(n) = n при n ≤ 3 при n > 3: F(n) = n*n*n + F(n–1), если n делится на 3 F(n) = 4 + F(n//3), если n = 3k + 1 F(n) = n*n + F(n–2), если n = 3k + 2 Здесь // обозначает деление нацело. Чему равно значение величины F(100)? Подскажите, никак не пойму, что такое к и откуда он береться?

Ответов - 5

Pavlova21: Кто-нибудь решал эту задачу?

zachto: F(n) = 4 + F(n//3), если n = 3k + 1 - Это значит, что n при делении на 3 даёт остаток 1. F(n) = n*n + F(n–2), если n = 3k + 2 - Это значит, что n при делении на 3 даёт остаток 2. Решить можно через простое динамическое программирование или рекурсию (если она не умрёт).

Pavlova21: Спасибо большое! Теперь поняла


Pavlova21: def f(n): if n<=3: return n if n>3 and n%3==0: return n*n*n+f(n-1) if n>3 and n%3==1: return 4+f(n//3) if n>3 and n%3==2: return n*n+f(n-2) print(f(100)) Даже рекурсией быстро считает, загвозка была только в этом условии

Faiz: F(n)=1 при n<3 F(n)=F(n-1)-F(n-2), если n>2 и при этом n нечётное Fn)= n-1 знак суммы i=1 F(i), если n>2 и при этом n чётное. Чему равно значение функции F(39) ef f(n): if n<3: return 1 if (n>2) and (n%2!=0): return f(n-1)-f(n-2) if (n>2) and (n%2==0): for i in range (1,n): return +f(i) print(f(39)) Не работает. Кто нибудь разбирал такое задание? Спасибо.



полная версия страницы