Rumah >pembangunan bahagian belakang >Golang >Bolehkah anda menerangkan mengapa pembolehubah mempunyai nilai yang berbeza apabila ia diisytiharkan di dalam fungsi?

Bolehkah anda menerangkan mengapa pembolehubah mempunyai nilai yang berbeza apabila ia diisytiharkan di dalam fungsi?

王林
王林ke hadapan
2024-02-12 17:30:06393semak imbas

Bolehkah anda menerangkan mengapa pembolehubah mempunyai nilai yang berbeza apabila ia diisytiharkan di dalam fungsi?

Kandungan soalan

Ini adalah kali pertama saya menulis kod. Tetapi pembolehubah 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
}

Selepas menukar kod seperti ini, sebelah kiri mempunyai nilai di sebelah kanan.

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
}

Apa bezanya? ? Tolong beritahu saya.

Saya fikir pembolehubah left 在递归后应该具有不同的值,但事实并非如此。

解决方法

在第一种情况下,left sepatutnya mempunyai nilai yang berbeza selepas rekursi, tetapi tidak.

Penyelesaianleft

Dalam kes pertama, pembolehubah 🎜 berada di dalam penutupan lambda dalam. Ini bermakna pembolehubah adalah "global" dari perspektif fungsi. Memandangkan lambda adalah rekursif, setiap panggilan memusnahkan nilai sebelumnya, yang pada penghujung (rekursif) mempunyai nilai -1 (huruf asas rekursif) dan tidak pernah berubah selepas itu (apabila kembali dari rekursi). 🎜 🎜Dalam kes kedua, 🎜 ialah pembolehubah setempat, yang kemudiannya ditolak atau muncul pada tindanan pada setiap panggilan. 🎜

Atas ialah kandungan terperinci Bolehkah anda menerangkan mengapa pembolehubah mempunyai nilai yang berbeza apabila ia diisytiharkan di dalam fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam