御笔剑客 发表于 2020-4-15 21:19:51

关于全局变量的问题

为什么这里的memo为全局变量,外部memo长度仍为0呢? 输出的地方见注释
memo = dict()

def superEggDrop(K: int, N: int):
    def dp(K, N) -> int:
      if K == 1: return N
      if N == 0: return 0
      # 避免重复计算

      if (K, N) in memo:
            return memo[(K, N)]
      res = float("INF")
      # 穷举
      for i in range(1, N + 1):
            res = min(res,
                      max(
                        dp(K, N - i),
                        dp(K - 1, i - 1)
                      ) + 1)
      # print(memo) 在这里有输出
      memo[(K, N)] = res
      return res
    # print(len(memo)) 在这里输出为0
    return dp(K, N)

print(len(memo)) # 在这里输出也为0
print(superEggDrop(10, 10))

zltzlt 发表于 2020-4-15 21:22:37

memo 是在 dp 函数添加元素的,还没调用 spuerEggDrop、dp 的时候就打印 memo 的长度肯定是 0 ,调用后再打印看看:

memo = dict()

def superEggDrop(K: int, N: int):
    def dp(K, N) -> int:
      if K == 1: return N
      if N == 0: return 0
      # 避免重复计算

      if (K, N) in memo:
            return memo[(K, N)]
      res = float("INF")
      # 穷举
      for i in range(1, N + 1):
            res = min(res,
                      max(
                        dp(K, N - i),
                        dp(K - 1, i - 1)
                      ) + 1)
      # print(memo) 在这里有输出
      memo[(K, N)] = res
      return res
    # print(len(memo)) 在这里输出为0
    return dp(K, N)

print(len(memo)) # 在这里输出也为0
print(superEggDrop(10, 10))
print(len(memo))

Hello. 发表于 2020-4-15 22:08:33

楼上说的对@wuqramy @乘号

wuqramy 发表于 2020-4-15 22:09:34

Hello. 发表于 2020-4-15 22:08
楼上说的对@wuqramy @乘号

干嘛

Hello. 发表于 2020-4-15 22:11:48

wuqramy 发表于 2020-4-15 22:09
干嘛

鱼币。。

乘号 发表于 2020-4-16 07:51:52

Hello. 发表于 2020-4-15 22:11
鱼币。。

页: [1]
查看完整版本: 关于全局变量的问题