Maison > développement back-end > Golang > Pouvez-vous expliquer pourquoi les variables ont des valeurs différentes lorsqu'elles sont déclarées à l'intérieur d'une fonction ?

Pouvez-vous expliquer pourquoi les variables ont des valeurs différentes lorsqu'elles sont déclarées à l'intérieur d'une fonction ?

王林
Libérer: 2024-02-12 17:30:06
avant
472 Les gens l'ont consulté

Pouvez-vous expliquer pourquoi les variables ont des valeurs différentes lorsquelles sont déclarées à lintérieur dune fonction ?

Contenu de la question

C'est la première fois que j'écris du code. Mais la 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
}
Copier après la connexion

Après avoir modifié le code comme ceci, le côté gauche a la valeur sur le côté droit.

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
}
Copier après la connexion

Quelle est la différence ? ? s'il vous plaît dites-moi.

Je pensais que la variable left 在递归后应该具有不同的值,但事实并非如此。

解决方法

在第一种情况下,left devrait avoir une valeur différente après la récursion, mais ce n'est pas le cas.

Solutionleft

Dans le premier cas, la variable 🎜 est à l'intérieur de la fermeture du lambda interne. Cela signifie que la variable est « globale » du point de vue de la fonction. Puisque le lambda est récursif, chaque appel détruit la valeur précédente, qui à la fin (de la récursion) a une valeur de -1 (le cas de base récursif) et ne change jamais par la suite (au retour de la récursion). 🎜 🎜Dans le deuxième cas, 🎜 est une variable locale, qui est ensuite poussée ou placée sur la pile à chaque appel. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal