Maison >développement back-end >Golang >Quel est le problème avec ma fonction récursive écrite en go ?

Quel est le problème avec ma fonction récursive écrite en go ?

王林
王林avant
2024-02-06 10:27:07460parcourir

我用 go 编写的递归函数有什么问题?

Contenu de la question

J'apprends le golang à travers le livre "le langage de programmation go", au chapitre 5, section 5.3 (Valeurs de retour multiples) Exercice 5.5, je dois implémenter une fonction countwordandimages,该函数从 (golang.org/x/ net) 包中,并计算 html 文件中的单词和图像数量,我实现了以下函数,但出于某种原因,我收到每个 wordsimages qui renvoie 0 d'un Valeur variable .

func countWordsAndImages(n *html.Node) (words, images int) {
    if n.Type == html.TextNode {
        words += wordCount(n.Data)
    } else if n.Type == html.ElementNode && n.Data == "img" { // if tag is img on element node
        images++
    }
    for c := n.FirstChild; c != nil; c = n.NextSibling {
        tmp_words, tmp_images := countWordsAndImages(c)
        words, images = words+tmp_words, images+tmp_images
    }
    return words, images
}

func wordCount(s string) int {
    n := 0
    scan := bufio.NewScanner(strings.NewReader(s))
    scan.Split(bufio.ScanWords)
    for scan.Scan() {
        n++
    }
    return n
}

J'essaie d'éviter de nommer des tuples de variables de retour ((int, int)) dans les fonctions. (int, int))。


正确答案


使用 c.nextsibling 前进到下一个兄弟,而不是 n.nextsibling

Bonne réponse

Utilisez c.nextsibling pour passer au frère suivant au lieu de n.nextsibling :

for c := n.FirstChild; c != nil; c = c.NextSibling {
    ⋮

🎜https://www.php.cn/link/e7364a5abd2a860cf8e33b114369b92b🎜🎜

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