代码如下:
#python 3.4.3 win7 #问题5 #编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序, #并输出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。 #数字序列 NumList = [x for x in range(1,10)] #目标值 TARGET_SUM = 100 #添加一个数字到表达式字符串 def add(digit, sign, branches): tempL = branches #采用临时列表,防止原地修改 for x in range(len(tempL)): tempL[x] = str(digit) + sign + tempL[x] return tempL #递归函数实现分治算法。 def fun(sum, number, index): digit = abs(number) % 10 #递归跳出条件 if index >= len(NumList): if sum == number: return [str(digit)] return [] #三个按算法要求的分支递归 branch1 = fun(sum - number, NumList[index], index + 1) branch2 = fun(sum - number, -NumList[index], index + 1) conNum = 0 if number < 0: conNum = number * 10 - NumList[index] else: conNum = number * 10 + NumList[index] branch3 = fun(sum, conNum, index + 1) #保存递归结果到列表 L = [] L.extend(add(digit, '+', branch1)) L.extend(add(digit, '-', branch2)) L.extend(add(digit, '', branch3)) return L; # if __name__ == "__main__": for x in fun(TARGET_SUM, NumList[0], 1): print(x)