如何解决如何计算递归函数中的案例数?
def calcPath(trace_map,x,y):
n = len(trace_map)
count = 0
if x > n - 1 or y > n - 1:
pass
elif x < n and y < n:
if x + trace_map[x][y] == (n - 1) and y == (n - 1):
count += 1
elif x == (n - 1) and y + trace_map[x][y] == (n - 1):
count += 1
else:
calcPath(trace_map,x + trace_map[x][y],y)
calcPath(trace_map,y + trace_map[x][y])
return count
if __name__ == "__main__":
trace_map = [
[1,2,9,4,9],[9,3,2],1,0],]
print(calcPath(trace_map,0))
trace_map = [[1,1],[1,0]]
print(calcPath(trace_map,0))
我想计算给定迷宫的现有路线。 (无论如何,问题本身并不那么重要) 问题是,我试图计算满足递归函数条件的情况。
这是必须计算的两个条件。
if x + trace_map[x][y] == (n - 1) and y == (n - 1):
if x == (n - 1) and y + trace_map[x][y] == (n - 1):
我试图计算像这样的情况
count = 0
if condition = True:
count +=1
但是由于我使用的是递归函数,因此如果我在函数中声明count = 0,则计数值将保持为0。
很快,我只想让计数器不受递归函数的影响。
解决方法
解决此问题的方法之一是通过添加从每个递归函数的返回中获得的计数。调用递归函数时,请获取返回的计数并将其添加到当前作用域的count
变量中。例如:
def calcPath(trace_map,x,y):
n = len(trace_map)
count = 0
if x > n - 1 or y > n - 1:
pass
elif x < n and y < n:
if x + trace_map[x][y] == (n - 1) and y == (n - 1):
count += 1
elif x == (n - 1) and y + trace_map[x][y] == (n - 1):
count += 1
else:
count += calcPath(trace_map,x + trace_map[x][y],y)
count += calcPath(trace_map,y + trace_map[x][y])
return count
另一种解决方案是创建一个全局变量,并在每次调用该函数时将其重置为0(尽管我不建议这样做,因为每次调用该函数都需要仪式)。
可能看起来像这样:
count = 0 # Global variable
def calcPath(trace_map,y):
global count
n = len(trace_map)
if x > n - 1 or y > n - 1:
pass
elif x < n and y < n:
if x + trace_map[x][y] == (n - 1) and y == (n - 1):
count += 1
elif x == (n - 1) and y + trace_map[x][y] == (n - 1):
count += 1
else:
calcPath(trace_map,y)
calcPath(trace_map,y + trace_map[x][y])
if __name__ == "__main__":
trace_map = [
[1,2,9,4,9],[9,3,2],1,0],]
print(calcPath(trace_map,0))
# Use count in some way
count = 0 # Reset the count
trace_map = [[1,1],[1,0]]
print(calcPath(trace_map,0))
,
我认为您可以使用nested scope
的概念,也可以将其简单地放在另一个函数中。例如:
def fuc(args):
if not args:
return 0
else:
fuc.count += 1
return args[0] + fuc(args[1:])
def fac(fuc,args):
fuc.count = 0
return fuc(args),fuc.count
print(fac(fuc,3]))
print(fac(fuc,[4,5,6,7]))
(6,3)
(22,4)
[Finished in 0.1s]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。