[왕초보] 2의 n승 코드 질문드립니다.

import java.util.*; public class exam6_3_1 {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.print("입력 ㄱ : ");
    Scanner sc = new Scanner(System.in);
    int a = sc.nextInt();
    System.out.println("2의 "+a+"승 = "+factor(a));
}
public static int factor(int num) {
    if (num==0)
        return 1;
    else
        return 2*factor(num-1);
}

}

전에 만들었던 팩토리알 코드를 응용해서 작성했습니다. 팩토리알 코드 → return n*factor(num-1); 그냥 별 생각없이 n 대신 2를 넣었는데 실행이됐습니다. 문제는 왜 제대로 출력이 되는지 이해를 못하겠습니다.

예를들어 5를 입력하면 2*4*3*2*1 로 48이 나와야 하는게 아닌지..... 고수님들 부탁드립니다.

1답변

  • 좋아요

    1

    싫어요
    채택취소하기

    코딩이란 게 뭐가 안 돼도 이상하지만 뭐가 돼도 이상하죠. ㅋㅋ 여기서 factor() 함수가 뭘 하느냐면:

    1. 0보다 큰 수가 들어오면 그 수에서 1을 빼서 factor() 함수 돌리고 그 값에 2를 곱해서 돌려줍니다.
    2. 0이 들어오면 1을 돌려줍니다.

    따라서:

    factor(5) = 2*(factor(4)) = 2*(2*(factor(3))) = ... = 2*2*2*2*2*1 = 2^5

    • 아하 제가 factor함수에 대해서잘 몰랐나보네요. 정말 감사합니다! 미벨 2018.7.9 12:49
    • 저 함수는 factor 말고 다른 이름으로 지어도 똑같이 작동합니다. 재귀적으로 작성된 함수라는 점이 중요하고요. 엽토군 2018.7.9 17:53

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.