else digit(to_string(sum)); 이건 아무것도 리턴을 하지 않습니다. 문장 그대로, digit이라는 함수를 한 번 호출할 뿐입니다.
재귀호출된 digit이 무언가 리턴을 했더라도, 그건 그 재귀호출된 함수가 리턴했을 뿐 자기 자신이 무언가를 리턴하지는 않습니다.
결국 자신은 아무것도 리턴할 것을 명시하지 않았고, 이 때의 동작은 정의되어 있지 않습니다.
else return digit(to_string(sum)); 으로 써야 합니다.
park780172 5년 전
우선 첫 번째 코드가 정답 코드이고, 두 번째가 틀린 코드입니다.
두 번째 코드에서는 39를 입력하였을 때, 쓰레기 값이 출력되는 것 같습니다.
아무래도 한 번 구했을 때, 10 이상이면 뭔가 일이 일어나는 것 같은데..
첫 번째 코드는 그냥 바로 digit 함수 내에서 출력이고, 두 번째 코드는 단순 int(=sum)를 return하는 것인데
두 번째 코드는 왜 쓰레기 값이 나오는지 모르겠습니다.
참고로 두 번째 코드에서 printf 으로 digit(s)를 출력도 해보았으나, 역시나 쓰레기 값이 나옵니다.
혹시 몰라서 cout으로 시도해본 것입니다.