Python中的递归函数调用
我是Python的初学者,希望解决以下问题:给定一个由n个整数组成的列表和一个整数结果,将找到正确的运算符(+、-、*、/)来解相应的简单数学方程 示例:Python中的递归函数调用,python,recursion,nested-loops,Python,Recursion,Nested Loops,我是Python的初学者,希望解决以下问题:给定一个由n个整数组成的列表和一个整数结果,将找到正确的运算符(+、-、*、/)来解相应的简单数学方程 示例: 对于数字=[2,3,4,1]和结果=13,应找到以下解决方案: 2+3*4-1=13 我编写了以下代码,通过使用3个嵌套for循环的蛮力方法找到了n=4的解决方案,在这些循环中,操作符是交替的。当我试图写一个n是任意的算法时,我很挣扎。这可以通过递归函数调用解决吗?如果可以,如何解决 numbers = [2, 3, 4, 1] result
对于数字=[2,3,4,1]和结果=13,应找到以下解决方案:
2+3*4-1=13 我编写了以下代码,通过使用3个嵌套for循环的蛮力方法找到了n=4的解决方案,在这些循环中,操作符是交替的。当我试图写一个n是任意的算法时,我很挣扎。这可以通过递归函数调用解决吗?如果可以,如何解决
numbers = [2, 3, 4, 1]
result = 13
op = ['+','-','*', '/']
Found=0
for i in op:
for j in op:
for k in op:
#Build string for left side of the equation: e.g. '2 + 3 + 4 + 1'
exp = str(numbers[0]) + i + str(numbers[1]) + j + str(numbers[2]) + k + str(numbers[3])
if eval(exp) == result:
Found += 1
if Found == 1:
print('Found Solution(s):')
print(f'{numbers[0]} {i} {numbers[1]} {j} {numbers[2]} {k} {numbers[3]} = {result}')
if Found == 0:
print('No solution found!')
这不是一个递归的解决方案,也没有比你的更有效的解决方案,但它可以处理任意数量的操作
itertools.product
用于获取您想要的内容,如果我能想出一个高效的递归解决方案,我将编辑此内容
from itertools import product
def check_result(numbers,result):
op = ['+','-','*', '/']
for i in product(op,repeat=len(numbers)-1):
t=[None]*(len(numbers)+len(i))
t[::2],t[1::2]=numbers,i
t=[str(i) for i in t]
expr=''.join(t)
if eval(expr)==result:
return 'Found'
return 'Not Found'
print(check_result([2, 3, 4, 1],13)) # Found
print(check_result([2, 3, 4, 1,2],14)) # Found
print(check_result([2, 3, 4, 1,2,3,3,1,2],242)) # Not Found
对递归主要是指编写代码来稍微减少一个问题,并让减少的问题通过递归调用来解决,直到它变得非常简单,不需要更深入的递归为止。尝试为此编写代码。如果你有具体问题,你可以在这里用你的代码提问。你打败了我:我正要点击发布按钮,然后你的答案出现了:)(这与我要提出的几乎相同)。谢谢你的快速回复,非常感谢!