这是使用递归函数的另一种“蛮力”解决方案:
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:取屏幕上当前数字的平方