Maison > développement back-end > Golang > le corps du texte

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
353 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!

source:stackoverflow.com
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!