Автор | Сообщение |
|
Отправлено: 29.12.22 04:01. Заголовок: задание 16 номер 17
17) Алгоритм вычисления функции F(n) задан следующими соотношениями: F(n) = n + 3 при n < 3 F(n) = (n + 2)·F(n–4), если n ≥ 3 и делится на 3, F(n) = n + F(n–1) + 2·F(n–2), если n ≥ 3 и не делится на 3. Чему равно значение функции F(20)? Здравствуйте, подскажите пожалуйста, как решить данное задание с помощью динамического программирования, с помощью массива. Непонятен вопрос, какой элемент брать в массиве, если индекс равен-1, если подставить n=3, то программа со массивом выводит 25(берет 5*5), а рекурсивная функция берет (5*2), не могу понять откуда 2. Ответ рекурсией сошелся, ответ массивом нет a=[0,4,5] print("0,1,2,3") for n in range(3,21): if n>=3 and n%3==0: a.append((n+2)*a[n-4]) if n>=3 and n%3!=0: a.append(n+a[n-1]+2*a[n-2]) print(a[3],a[4],a[20]) def f(n): if n<3: return n+3 if n>=3 and n%3==0: return (n+2)*f(n-4) if n>=3 and n%3!=0: return n+f(n-1)+2*f(n-2) print(f(0),f(1),f(2),f(3-4)) print(f(3),f(4),f(20)) выводит 0,1,2,3 25 39 1736927 3 4 5 2 10 24 1112057 Весь вопрос в числе 25)
|
|
|
Новых ответов нет
[см. все]
|
|
|
Отправлено: 05.01.23 17:25. Заголовок: elpov06 пишет: a= ..
elpov06 пишет: цитата: | Ответ рекурсией сошелся, ответ массивом нет |
| Попробуй так: a=[0,4,5,10] for n in range(4,21): if n>=3 and n%3==0: a.append((n+2)*a[n-4]) if n>=3 and n%3!=0: a.append(n+a[n-1]+2*a[n-2]) print(a[20])
|
|
|
|
Отправлено: 05.01.23 17:39. Заголовок: а так, еще круче a=..
а так, еще круче a=[0,4,5,10] for n in range(4,21): if n>=3 and n%3==0: a.append((n+2)*a[n-4]) else: a.append(n+a[n-1]+2*a[n-2]) print(a[20])
|
|
|
|