[C] 재귀함수로 m의 n승 구하기

Haeun Noh·2022년 10월 20일
0

C언어_예제

목록 보기
13/19

1018


10 이하의 숫자인 mn을 입력받아 재귀함수를 이용하여 m의 n제곱의 값을 구하여라.

//ex)
10 이하의 정수 두 개 입력 : 2 4
24제곱 : 16

소스 코드

#include <stdio.h>

long getPower(int m, int n) {
	if (n == 0) {
		return;
	}
	return m * getPower(m, n-1);
}

int main(void) {
	int m, n;

	printf("10 이하의 정수 두 개 입력 : ");
	scanf_s("%d %d", &m, &n);

	printf("%d의 %d제곱 : %d\n", m, n, getPower(m, n));

	return 0;
}

소스 풀이

int main(void) {
	int m, n;

main()에서 정수형 타입의 mn을 선언해줍니다.


	printf("10 이하의 정수 두 개 입력 : ");
	scanf_s("%d %d", &m, &n);

10이하의 정수 두 개를 입력받아 각각 mn에 값을 저장합니다. 이 때 m은 제곱받을 수이고, n은 지수를 뜻합니다.


	printf("%d의 %d제곱 : %d\n", m, n, getPower(m, n));

getPower(m,n);으로 getPower()함수에 mn의 값을 파라미터로 줍니다.
printf문은 getPower()함수가 종료된 뒤에 실행되므로 지금은 넘어가는 것입니다.


long getPower(int m, int n) {
	if (n == 0) {
		return;
	}
	return m * getPower(m, n-1);
}

long타입을 반환하는 getPower()함수입니다. 파라미터로 받은 mn은 각각 제곱할 수와 지수입니다.

만약 지수를 나타내는 n0이 되었을 때에는 return하여 getPower()함수를 종료합니다.

n0의 값이 아닌 경우에는 return으로 넘어가는데 mgetPower(m, n-1)을 곱해 재귀함수를 호출하며 동시에 n1감소합니다. n0이 될 때까지 m이 곱해지는 것이 누적되며 결과적으로 mn만큼 제곱된 값이 리턴됩니다.


	printf("%d의 %d제곱 : %d\n", m, n, getPower(m, n));

	return 0;
}

getPower(m,n);에서 리턴된 제곱된 값이 출력됩니다.

출력된 후 프로그램이 정상 종료됩니다.



profile
기록의 힘을 믿는 개발자, 노하은입니다!

0개의 댓글