Algoritmo para somar digítos

Hoje fiz um teste numa empresa, e um dos exercícios pedia pra criar um algoritmo que pegava um número inteiro e somava todos os dígitos, utilizando recursividade.
Foi novidade pra mim, então comecei a fazer continhas de dividir, e percebi que dividindo o número por 10, e seus quocientes sequentes também por 10, eu chegava no último quociente que era 0 (flutuante).

Os restos deixados pelas divisões eram os dígitos do número, aí só foi somá-los um a um.

    public static int sumInt(int num, int sum) {
        if (num < 1) return sum;
        sum += num % 10;
        return sumInt(num / 10, sum);
    }

Na hora da prova, fiz um teste de mesa com esse código e deu erro. Mas chegando em casa executei e vi que deu certo.
Ex: 1234 => soma dá 10 (1+2+3+4).

O exercício não permitia manipular para String. Bom, confesso que em primeira instância eu faria com manipulação convertendo em String. Porco…rs…
Contudo achei interessante me fez pensar melhor e resolver um problema utilizando uma forma bacana. Alguém consegue resolver este problema de outras formas? Seria interessante compartilhar mais pra aprendizado.

Abraço!

Acho que também poderia ser assim:

public static int soma(int x){ if(x<10) return x; else return soma(x/10) + x%10; }

[]'s

eXtreme Go Horse, regra número 1:

  1. Se pensou, já começou errado…

public static int sumInt(int num, int sum) {  

  if (num < 1) return sum; // Não tem sentido mas... mantém para dar uma ilusão de ótica...

        int sumGoHorse = num % 10;
        sum += num % 10;
        
        String numStr = String.valueOf(num);
        String sumStr = String.valueOf(sumGoHorse);

        numStr = numStr.replace(sumStr, "");
        
        if(numStr == "") return sum;

        num = new Integer(numStr); // Try Cath é para os fracos...
        
        return sumInt(num, sum);
}

Go Horse é seu amigo… mas ele pode ser vingativo…

:lol:

[quote=jesieltrevisan]eXtreme Go Horse, regra número 1:

  1. Se pensou, já começou errado…

public static int sumInt(int num, int sum) {  

  if (num < 1) return sum; // Não tem sentido mas... mantém para dar uma ilusão de ótica...

        int sumGoHorse = num % 10;
        sum += num % 10;
        
        String numStr = String.valueOf(num);
        String sumStr = String.valueOf(sumGoHorse);

        numStr = numStr.replace(sumStr, "");
        
        if(numStr == "") return sum;

        num = new Integer(numStr); // Try Cath é para os fracos...
        
        return sumInt(num, sum);
}

Go Horse é seu amigo… mas ele pode ser vingativo…

:lol: [/quote]
Pois é o teste não permitia essa preciosa técnica de manipulação de String.
A primeira linha

 if (num < 1) return sum; 

eu coloquei pois quando o número chegasse a zero teria que parar a recursividade.
Mas o exemplo que o Adelar colocou acima foi mais simples e direto pra resolver.