Форум » Динамическое программирование » ЗАДАЧА 4550 ИЗ КЕГЭ » Ответить

ЗАДАЧА 4550 ИЗ КЕГЭ

mortg: Исполнитель преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера: 1. Добавить к числу два 2. Добавить само число 3. Домножить на само число Программа для исполнителя - это последовательность команд, которые увеличивают число. Найдите количество программ с нечетной длиной, которые из числа 1 могут получить 100. Мое решение: def f(curr,end,step): if curr>end: return 0 if curr==end and step%2==0: return 0 if curr==end and step%2!=0: return 1 if curr<end and step%2!=0: return f(curr+2,end,step+1)+f(curr*2,end,step+1)+f(curr*curr,end,step+1) print(f(1,100,0)) В чем не верно рассуждаю. Задача дает None

Ответов - 2

mortg: Нашла одну ошибку, 1 саму на себя умножать нельзя, но все равно None, где-то ошибка с шагом [pre2] def f(curr,end,step): if curr>end: return 0 if curr==end and step %2==0: return 0 if curr<end and step %2!=0 and curr==1: return f(curr+2,end,step+1)+f(curr*2,end,step+1) if curr<end and step %2!=0 and curr>1: return f(curr*curr,end,step+1)+f(curr+2,end,step+1)+f(curr*2,end,step+1) print(f(1,100,0)[/pre2]

Поляков: None означает, что функция не возвращает никакого результата при основном вызове. [pre2] def f(curr,end,step): if curr>end: return 0 if curr == end: if step % 2 == 0: return 1 else: return 0 if curr == 1: return f(curr+2,end,step+1) + f(curr*2,end,step+1) else: return f(curr*curr,end,step+1) + f(curr+2,end,step+1) + f(curr*2,end,step+1) print(f(1,100,0))[/pre2]



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