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

Рекурсия №2283 Задание 16

Max2003: (№ 2283) Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями: F(n) = n*n + 4*n + 3, при n > 25 F(n) = F(n+1) + 2*F(n+4), при n ≤ 25, кратных 3 F(n) = F(n+2) + 3*F(n+5), при n ≤ 25, не кратных 3 Определите количество натуральных значений n из отрезка [1; 1000], для которых сумма цифр значения F(n) равна 24. [pre2] def F(n): if n > 25: return n * n + 4 * n + 3 if n <= 25 and n % 3 == 0: return F(n + 1) + 2 * F(n + 4) elif n <= 25 and n % 3 != 0: return F(n + 2) + 3 * F(n + 5) for n in range (1,1001): b=0 cnt=0 while F(n) // 10 != 0: a = F(n) % 10 b = b + a if b == 24: cnt += 1 print(cnt)[/pre2] Очень давно сижу и никак не могу найти ответ на решения данных задач, где дано условие и промежуток. Сколько бы я не ждал ответ либо не появляется либо ответ 0. Что я делаю не так и как будет выглядеть программа в конечном виде?

Ответов - 3

Поляков: Max2003 пишет: cnt=0 Вы сбрасываете счетчик перед обработкой каждого числа.a = F(n) % 10 Тут вы снова повторяете рекурсивный вызов столько раз, сколько цифр в числе. Сохраните F(n) в переменной и работайте с ней. Еще совет: попробуйте использовать динамическое программирование. Это значительно быстрее работает.

cabanov.alexey: [pre2] def F(n): if n > 25: return n * n + 4 * n + 3 if n <= 25 and n % 3 == 0: return F(n + 1) + 2 * F(n + 4) elif n <= 25 and n % 3 != 0: return F(n + 2) + 3 * F(n + 5) cnt=0 for n in range (1,1001): b=0 x=F(n) while x > 0: b += x % 10 x //= 10 if b == 24: cnt += 1 print(cnt) [/pre2]

Max2003: Спасибо большое




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