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;
}
Result:
Explanation:
Stepbystepofthefunctionsoma()
passingasaparameterthevalue327
.
Step1:
intsoma(intn){//n=327if(n%10==n)//Orestodadivisãode327por10éiguala327?não,entãovamosparaoelse..returnn;elsereturn((n%10)+soma(n/10));//Retornaorestodadivisãode327por10maisoretornodafunção//somapassandocomoparâmetrooresultadointeirodadivisãode327//por10,ouseja,retorna7maisoretornodesoma(32).}
Step2:
intsoma(intn){//n=32if(n%10==n)//Orestodadivisãode32por10éiguala32?não,entãovamosparaoelse..returnn;elsereturn((n%10)+soma(n/10));//Retornaorestodadivisãode32por10maisoretornodafunção//somapassandocomoparâmetrooresultadointeirodadivisãode32//por10,ouseja,retorna2maisoretornodesoma(3).}
Step3:
intsoma(intn){//n=3if(n%10==n)//Orestodadivisãode3por10éiguala3?Sim!!returnn;//Entãoretorna3elsereturn((n%10)+soma(n/10));}
Step4:
//Somarosvaloresqueestamnapilhadememória3+2+7
Recursivemethodillustration: