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 ?

王林
Libérer: 2024-02-06 10:27:07
avant
421 Les gens l'ont consulté

我用 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
}
Copier après la connexion

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 {
    ⋮
Copier après la connexion
🎜//m.sbmmt.com/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!

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