[C언어] 재귀 함수 - 거듭제곱 (power)

예제 모음/C/C++2013. 12. 5. 18:57



※요약

C언어에서 재귀 호출을 이용한 거듭제곱 구하는 함수다.

어떤 수 a에 대하여 n개 곱한 것을 a^n( a)이라 표시하고 a의 n제곱이라 하며, n을 거듭제곱의 지수라고 한다.

a = 3, n = 5일때 3^5 = 243 = 3 * 3 * 3 * 3 * 3 다.



※예제

#include <stdio.h>

double power( double a, int num );

int main( )
{	
	printf( "%.10lf", power( 3.141592653589793238462643383279, 3 ) );

	return 0;
}

double power( double a, int num )
{
    if( num == 0 )
        return 1;   
 
    return a * power( a, num-1 );
}


결과


작성자

Posted by 사용자 오뇽

태그

관련 글

댓글 영역

  • 프로필 사진
    name
    2017.01.19 02:19

    int main(){
    int n;
    scanf("%d",&n);
    printf("%d",square(n));
    return 0;
    }
    int square(int n){
    if(n==0) return 1;
    return 2 * square(n-1);
    }

    제가 짠 거들제곱 코드입니다.

    n에 5가 들어갔다고 할때,

    return 2 * square(4)
    return 2 * square(3)
    return 2 * sqaure(2)
    return 2 * square(1)
    return 2 * sqaure(0)

    같은식으로 진행이 될텐데,

    Q1. 여기서 square(4)를 4
    square(3)을 8
    square(2)를 16
    sqaure(1)을 32
    square(0)을 1 (if (n==0) return 1에 의해서) 이 맞을까요?

    Q2. 왜 32가 리턴이 되는지 궁금합니다.
    마지막 square(0)에 의해서 1이 리턴 돼야하는것 아닌가요?

    • 프로필 사진
      name
      2017.01.19 02:22

      댓글 수정이 안돼서 답글로 남깁니다

      질문전에 감사인사 먼저 올립니다
      블로그 글 잘 보고 있습니다!!
      제가 궁금한게 있으면 꼭 짚고 넘어가는 스타일이라 ㅎㅎ.. 답변해주시면 정말 고맙습니다

    • 프로필 사진
      2017.01.19 20:51 신고

      안녕하세요.

      일단 name님의 코드는 문제없구요. 질문에 대한 답 드릴께요.

      Q1.
      square(4)를 4
      square(3)을 8
      square(2)를 16
      sqaure(1)을 32
      square(0)을 1
      상기처럼 질문하셨는데, 타고 들어가는 순서는 맞지만 나올때는 역순으로 나옵니다. 고로 위의 우측의 각 값은 틀립니다.

      Q2.
      왜 32가 리턴되냐면, 위에서 설명했듯이 square의 인자 n이 0이 될때까지는 아래와 같이 순차적으로 타고 들어가지만
      square(5)
      square(4)
      square(3)
      square(2)
      square(1)

      인자 n이 0이 되서 1을 리턴하기 시작한 이후로는 아래와 같이 거꾸로 거슬러 올라갑니다.
      square(1)
      square(2)
      square(3)
      square(4)
      square(5)

      그래서 square(0)이 1을 리턴하면서 *2가 되면서 또 2를 리턴하고, 리턴된 2는 또 *2되면서 4가 리턴되고 하면서 결국엔 32가 리턴됩니다.

      글로 설명하려니 힘드네요. 직접 만나서 그리면서 설명드리면 금방인데요.. 아무튼 C언어 책 보면 그림으로 설명되어 있을거에요! 열공하세요.