Hi recently I encountered a subtle issue while trying to build a Trie function:
def search(self, word):
    def dfs(node, word):
        if not word:
            if node.end:
                self.res = True
            return
        if word[0]!='.':
            node = node.next.get(word[0])
            if not node:
                return
            dfs(node, word[1:])
        else:
            for n in node.next.values():
                dfs(n, word[1:])
    curr = self.root
    self.res = False
    dfs(curr, word)
    return self.res
This works.
But this doesn't:
def search(self, word):
    def dfs(node, word, res):
        if not word:
            if node.end:
                res = True
            return
        if word[0]!='.':
            node = node.next.get(word[0])
            if not node:
                return
            dfs(node, word[1:], res)
        else:
            for n in node.next.values():
                dfs(n, word[1:], res)
    curr = self.root
    res = False
    dfs(curr, word, res)
    return res
I don't get it why the latter approach, which passes a variable along the recursion instead of using a global variable, does not work.
 
    