Форум » Динамическое программирование » ege23 №182 » Ответить

ege23 №182

mcorleone: Непоседливый Непоседа решил сыграть в игру. Он придумал исполнителя, преобразующего числа на доске и имеющего три команды: 1. Прибавь 2 2. Сделай чётное 3. Сделай нечётное Первая команда увеличивает число на 2, вторая команда преобразует число N в число 2N при условии, что оно является нечетным. Третья — преобразует четное число N в нечетное вида 2N+1. Сколько существует программ, которые преобразуют исходное число 2 в 35, а траектория вычислений программы содержит не более двух преобразований в нечетное? Мой код: [pre2] def F(x, y, n): if x == y and n <= 2: return 1 elif x > y or n > 2: return 0 else: return F(x + 2, y, n) + F(x * 2, y, n) + F(x * 2 + 1, y, n + 1) print(F(2, 35, 0)) [/pre2] Мой ответ: 68 Ответ на сайте: 14 Вопрос: Подскажите, пожалуйста, где ошибка

Ответов - 2

mcorleone: Решено

MaxiK: mcorleone, у тебя нет в рекурсии условия проверки на четность и нечетность твоего числа 'x', поэтому твой код считает лишнее. Вот код: [pre2] def F(x,y,n): if x == y and n <= 2: return 1 elif x > y or n > 2: return 0 else: if x % 2 == 0: return F(x + 2, y, n) + F(x * 2 + 1, y, n + 1) if x % 2 != 0: return F(x + 2, y, n) + F(x * 2, y, n) print(F(2,35,0))[/pre2]



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