Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Liljhou

C++ Código função recursiva que soma os números digitados

Recommended Posts

Olha esse código:

#include <stdio.h>

int main(void){

int n;

int soma(int n);

printf("digite os numeros que serao somados\n");
scanf("%d",&n);

printf("o resultado eh: %d",soma(n));
}

int soma(int n){
//modulo para verificar se não tem resto, numeros quebrados
if (n % 10 == n)
return n;
return ((n % 10) + soma(n / 10));
}

Ele tem uma função recursiva, alguém sabe me explicar como funciona essa função? linha por linha dela? o código soma todos os numeros que você digita, por exemplo se digitar 1 5 6 ele informa 12.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade, se você digitar 1 5 6 ele deveria informar 1 (porque n seria igual a 1 após passar pelo scanf). Se digitar 156 informaria 12.

 

// Soma todos os dígitos de n.
// Exemplo: se n == 156, soma(n) retorna 12.
int soma(int n){
  // Se o resto da divisao de n por 10 é igual ao próprio n
  // então n < 10. Nesse caso, n % 10 será o próprio n.
  // Por exemplo, se n == 9, n % 10 resulta em 9;
  // mas se n == 10, n % 10 resulta em 0;
  // e se n == 15, n % 10 resulta 5;
  // em resumo, n % 10 te dará o último digito de n,
  // que é o próprio n caso n < 10.
 
  // Note que como esta é uma função recursiva, sem uma
  // condição de parada ela ficaria se chamando infinitamente.
  // Aqui é o momento que ela para de se chamar e retorna algo.
  if (n % 10 == n) return n; // retorna o último (e único digito) de n

  // Note que n / 10 retorna n SEM o último digito.
  // Se n == 156, n / 10 resulta em 15 (e nao 15.6), pois
  // n é um inteiro (não pode ter nada depois do ".").
  // Note ainda que 159 / 10 dá 15, e não 16 (ele não
  // arredonda, apenas corta o que tem depois da vírgula).

  // Então o que queremos agora é somar o último digito de n,
  // que já sabemos como obter (n % 10), à soma dos digitos
  // restantes, que também já sabemos obter (n / 10)

  // Logo, (ultimo digito) + soma(digitos restantes),
  // ou seja, (n % 10) + soma(n / 10)
  return ((n % 10) + soma(n / 10));
}

 

Editado por RafaelCLP
melhorando explicação
  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×