Maison  >  Article  >  développement back-end  >  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 ?

王林
王林avant
2024-02-12 17:30:06354parcourir

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
}

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
}

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer