Code:
#include <iostream>
int soma(int n){
if(n%10 == n)
return n;
else
return ((n % 10) + soma(n/10));
}
int main(int argc, char** argv) {
printf("%d\n", soma(327));
return 0;
}
Upshot:
Explanation:
Step by step function soma()
passing as parameter the value 327
.
Step 1:
int soma(int n){ // n= 327
if(n%10 == n) // O resto da divisão de 327 por 10 é igual a 327? não, então vamos para o else..
return n;
else
return ((n % 10) + soma(n/10));
// Retorna o resto da divisão de 327 por 10 mais o retorno da função
// soma passando como parâmetro o resultado inteiro da divisão de 327
// por 10, ou seja, retorna 7 mais o retorno de soma(32).
}
Step 2:
int soma(int n){ // n= 32
if(n%10 == n) // O resto da divisão de 32 por 10 é igual a 32? não, então vamos para o else..
return n;
else
return ((n % 10) + soma(n/10));
// Retorna o resto da divisão de 32 por 10 mais o retorno da função
// soma passando como parâmetro o resultado inteiro da divisão de 32
// por 10, ou seja, retorna 2 mais o retorno de soma(3).
}
Step 3:
int soma(int n){ // n= 3
if(n%10 == n) // O resto da divisão de 3 por 10 é igual a 3? Sim!!
return n; //Então retorna 3
else
return ((n % 10) + soma(n/10));
}
Step 4:
//Somar os valores que estam na pilha de memória 3+2+7
Illustration of the recursive method:
Have you tried the table test?
– Jefferson Quesado
What is a Table Test? How to Apply It?
– Woss
You can study a lot about recursion here: https://answall.com/a/267825/64969
– Jefferson Quesado
Yeah, but I still don’t get it. For example, in if (327%10 == 327) I would have 7 == 327, which is not true, and so I go to Else, which returns me (327%10 [which is 7])) + sum (327/10) [which is 32.7). From that moment on I do not understand exactly what happens, because from what I understood I will have 39 (that would be 7+32,7, but without the decimal) and this should not be right, but I also do not know the right way
– Matheus
I think I understand your doubt. In this case, in C and in almost every language I know (except for [tag:python-3], when dividing an integer by another one you get a new integer. So
327/10 ==> 32
, nay32,7
as we learn in the arithmetic of rational numbers. Welcome to the world of programming, where you must know at least 4 distinct arithmetic to really know what you are doing: integer arithmetic, fixed-point arithmetic, floating-point arithmetic and arbitrary precision arithmetic.– Jefferson Quesado