为什么在这段Python代码中,备忘录不起作用?

2024-05-19 13:33:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在看一段动态编程视频。但是,我的代码的备忘录不起作用。当我打印(备忘录)时,它没有存储任何真/假。它是空白的。请告知

def cansum(targetsum,numbers):
      memo = dict()
      print(memo)
      # check in memory
      if targetsum in memo:
            return memo[targetsum]
      if targetsum < 0: return False
      if targetsum == 0: return True
      for number in numbers:
            remainder = targetsum - number
            if cansum(remainder,numbers) == True:
                  memo[targetsum] = True
                  return True
      memo[targetsum] = False
      return False


print(cansum(7,[2,3])) #True
print(cansum(7,[5,3,4,7])) #True

Tags: infalsetruenumberreturnif编程动态
1条回答
网友
1楼 · 发布于 2024-05-19 13:33:36

我想这就是你可能想要做的:

def cansum(targetsum, numbers):
    memo = dict()

    def cansum_helper(targetsum, numbers):
        # check in memory
        if targetsum in memo:
            return memo[targetsum]
        if targetsum < 0:
            return False
        if targetsum == 0:
            return True
        for number in numbers:
            remainder = targetsum - number
            if cansum_helper(remainder, numbers) == True:
                memo[targetsum] = True
                return True
        memo[targetsum] = False
        return False

    result = cansum_helper(targetsum, numbers)

    print(memo)

    return result


print(cansum(7, [2, 3]))  # True
print(cansum(7, [5, 3, 4, 7]))  # True

如果你把

memo = dict()

在递归函数中,您为每个递归函数创建一个dict,一旦设置了memo,就会出现return语句,因此您将无法看到更改。但其目的是,您只需要一个dict就可以完成整个功能

相关问题 更多 >