Heim > Backend-Entwicklung > Golang > Können Sie erklären, warum Variablen unterschiedliche Werte haben, wenn sie innerhalb einer Funktion deklariert werden?

Können Sie erklären, warum Variablen unterschiedliche Werte haben, wenn sie innerhalb einer Funktion deklariert werden?

王林
Freigeben: 2024-02-12 17:30:06
nach vorne
408 Leute haben es durchsucht

Können Sie erklären, warum Variablen unterschiedliche Werte haben, wenn sie innerhalb einer Funktion deklariert werden?

Frageninhalt

Dies ist das erste Mal, dass ich Code schreibe. Aber die Variable left 的值始终为 -1.

func diameterofbinarytree(root *treenode) int {
    var longest int
    var left int
    var right int
    max := func(a, b int) int {
        if a > b {
            return a
        }
        return b
    }
    var dfs func(*treenode) int
    dfs = func(node *treenode) int {
        if node == nil {
            return -1
        }
        left = dfs(node.left)
        right = dfs(node.right)

        longest = max(longest, left+right+2)
        return (max(left, right) + 1)
    }
    dfs(root)
    return longest
}
Nach dem Login kopieren

Nachdem der Code so geändert wurde, steht auf der linken Seite der Wert auf der rechten Seite.

func diameterOfBinaryTree(root *TreeNode) int {
    var longest int
    max := func(a, b int) int {
        if a > b {
            return a
        }
        return b
    }
    var dfs func(*TreeNode) int
    dfs = func(node *TreeNode) int {
        if node == nil {
            return -1
        }
        left := dfs(node.Left)
        right := dfs(node.Right)

        longest = max(longest, left+right+2)
        return (max(left, right) + 1)
    }
    dfs(root)
    return longest
}
Nach dem Login kopieren

Was ist der Unterschied? ? Bitte sagen Sie mir.

Ich dachte, die Variable left 在递归后应该具有不同的值,但事实并非如此。

解决方法

在第一种情况下,left sollte nach der Rekursion einen anderen Wert haben, aber das ist nicht der Fall.

Lösungleft

Im ersten Fall befindet sich die Variable 🎜 innerhalb des Abschlusses des inneren Lambda. Dies bedeutet, dass die Variable aus Sicht der Funktion „global“ ist. Da Lambda rekursiv ist, zerstört jeder Aufruf den vorherigen Wert, der am Ende (der Rekursion) einen Wert von -1 hat (der rekursive Basisfall) und sich danach nie mehr ändert (bei der Rückkehr von der Rekursion). 🎜 🎜Im zweiten Fall handelt es sich bei 🎜 um eine lokale Variable, die dann bei jedem Aufruf auf den Stapel verschoben oder abgelegt wird. 🎜

Das obige ist der detaillierte Inhalt vonKönnen Sie erklären, warum Variablen unterschiedliche Werte haben, wenn sie innerhalb einer Funktion deklariert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage