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

王林
Lepaskan: 2024-02-12 17:30:06
ke hadapan
353 orang telah melayarinya

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!