Из первой 1 можно сделать числа 3, 2 и 1.
Чтобы посчитать количество программ для первой 2 и 3, можно воспользоваться кодом
def f(st, fn, ln):
if st > fn:
return 0
if st == fn and ln % 2 == 0:
return 1
return f(st + 2, fn, ln + 1) + f(st * 2, fn, ln + 1) + f(st ** 2, fn, ln + 1)
print(f(2, 100, 0) + f(3, 100, 0))
Но что мешает первые две команды сделать 3 3, т.е. возвести единицу дважды в квадрат и снова получится та же ситуация, еще столько же программ.
Более того, из первой единицы, полученной возведением в квадрат тоже есть программы, ведущие в 100 за нечетное количество команд.
Такое решение будет давать верный ответ, но оно неверное, потому что не учитывает возведение в квадрат 1
def f(st, fn, ln):
if st > fn:
return 0
if st == fn and ln % 2 == 1:
return 1
if st != 1:
return f(st + 2, fn, ln + 1) + f(st * 2, fn, ln + 1) + f(st ** 2, fn, ln + 1)
else:
return f(st + 2, fn, ln + 1) + f(st * 2, fn, ln + 1)
print(f(1, 100, 0))