-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
11분 코드 질문
23.08.02 17:12 작성 조회수 158
1
안녕하세요 하기 코드 질문드립니다
int sumTo(int sumto)
{
if (sumto <= 0)
return 0;
else if (sumto <= 1)
return 1;
else
return sumTo(sumto - 1) + sumto;
}
에서 굵게 표시한
if(sumto < = 1) return 1; 이 굳이 필요한 부분인가요?
~return 0은 재귀함수 중단을 위해 꼭 필요한 것이란 걸 알겠습니다만
~return 1은 어떤 이유에서 추가하셨는지 궁금해서 여쭤봅니다.
미리 답변 감사드립니다.
답변을 작성해보세요.
2
Soobak
2023.08.02
안녕하세요, 답변 도우미 Soobak 입니다.
말씀하신 내용처럼 if (sumTo <= 1) return 1;
코드 라인이 없어도, 함수는 여전히 숫자 n
에 대하여 1
부터 n
까지의 모든 정수의 합을 반환합니다. 즉, 해당 조건이 없어도 목표하는 결과를 얻을 수 있는 것은 맞습니다.
하지만, 해당 코드를 추가하면 재귀 함수의 성능이 향상되고, 호출 수를 줄일 수 있습니다.
특히, sumto
의 값이 1
일 때 입니다.sumto
가 1
이면, 위 코드 라인이 존재함으로 인해 재귀가 즉시 중단되고 1
을 반환합니다.
만약, 해당 코드 라인이 없다면, 함수는 sumto
가 0
이 될 때 까지 한 단계 더 재귀 호출을 진행해야 합니다.
재귀 함수에서 재귀 호출의 수를 줄이는 것은 중요합니다.
재귀 함수는 호출 될 때마다, '스택' 이라는 메모리 영역에 새로운 함수 프레임을 추가하는데요. (강의 7.10 스택과 힙 the stack and the heap 참고)
프로그램의 스택 공간은 제한적이기 때문에, 너무 많은 재귀 호출이 이루어져서 이 공간을 초과한다면, '스택 오버플로우' 라는 에러가 발생하게 됩니다.
따라서, 재귀 함수를 사용하실 때에는 항상 추가적인 재귀 호출을 방지하고, 성능 향상과 스택 오버플로우를 방지하는 것에 신경쓰는 것이 중요합니다.
답변 1