下面是另一种使用递归函数的“暴力”解决方案:
def calc(number, target, program="", programs=None):
if programs is None:
programs = []
if number == target:
programs.append(program)
return
if number > target:
return
calc(number * 2, target, program + "A", programs)
calc(number * 3, target, program + "B", programs)
calc(number + 5, target, program + "C", programs)
calc(number + 7, target, program + "D", programs)
calc(number ** 2, target, program + "E", programs)
return programs
示例调用:
>>> len(calc(2, 10))
0
>>> len(calc(3, 20))
5
>>> len(calc(5, 100))
34660
您还可以检查指向目标的实际程序:
>>> calc(3, 20)
['ADD', 'CCD', 'CDC', 'DA', 'DCC']
-
A
:将屏幕上的当前数字乘以2
-
B
:将屏幕上的当前数字乘以3
-
C
:在屏幕上的当前数字上添加5
-
D
:在屏幕上的当前数字上添加7
-
E
:取屏幕上当前数字的平方