Ir ao conteúdo

Posts recomendados

Postado

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.

Postado

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));
}

 

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...