Dúvida em retorno de função recursiva

Olá galera da Guj! Estou iniciando em programação c e estou com uma dúvida em uma função para contagem de Noh existentes segue:

int contarNos(folha *p){ if(p == NULL) return 0; else return 1 + contarNos(p->esq) + contarNos(p->dir); }

A Minha dúvida é no return, eu não entendi como é feito o return1 “+” contarNos(p->esq) “+” contarNos(p->dir). Alguém consegue me explicar?

Fonte do cod: https://pt.wikibooks.org/wiki/Programar_em_C/Árvores_binárias#Estrutura_Completa

Olá Felipe. Não sou muito bom explicando, mas vou tentar.

É o seguinte, essa função retorna um valor do tipo inteiro, logo era irá retornar 0 se o ponteiro *p apontar para NULL, mas caso ele não aponte para NULL irá ocorrer a chamada recursiva sendo que os parâmetros da função serão o ponteiro do nó esquerdo e o ponteiro do nó direito.

O pensamento é o seguinte: *p é uma nó? Se sim, ele soma 1 e verifica o nó esquerdo e o nó direito, senão ele soma 0.

1 curtida

Olá Ciro, deu para entender como funciona muito bem!!! Muito obrigado! =)
Função recursiva ainda estou me batendo hehe.