중첩 for문 재귀함수로 해결하는 방법

  • Wednesday
    Wednesday

    중첩된 for문을 재귀함수로 해결하고자 합니다.
    그런데 출력부에 대한 아이디어가 없어서요 ㅠㅠ
    현재까지 작성한 코드는 아래와 같습니다.

    /*
    출력: 3x2                    3x3
    (0,0) (0,1) (0,2)   (0,0,0) (0,0,1) (0,0,2)
    (1,0) (1,1) (1,2)   (0,1,0) (0,1,1) (0,1,2)
    (2,0) (2,1) (2,2)   (0,2,0) (0,2,1) (0,2,2)
                        (1,0,0) (1,0,1) (1,0,2)
                        (1,1,0) (1,1,1) (1,1,2)
                        (1,2,0) (1,2,1) (1,2,2)
                        (2,0,0) (2,0,1) (2,0,2)
                        (2,1,0) (2,1,1) (2,1,2)
                        (2,2,0) (2,2,1) (2,2,2)
    */
    #define SIZE 3
    #define SEL 3
    
    void bufprint(int cnt, int *pp)
    {
        printf("%d ",cnt);
    }
    void superposition(int size, int *p, int sel)
    {
        int i, tmp=0;
        for(i=0; i<SIZE; i++){
            if(sel==1) bufprint(i, p);
            else {
                superposition(size, p, sel-1);
            }
        }
        printf("\n");
    }
    int main()
    {
        int i, buf[SIZE];
        for(i=0; i<SIZE; i++) buf[i]=i;
    
        superposition(SIZE, buf, SEL);
        return 0;
    }
    

    도움 부탁 드립니다.


    10년 전
2개의 댓글이 있습니다.
  • 일루
    일루

    SIZE=3 이라고 가정하면, 'bufprint' 를 호출하는 과정은 superposition(3) -> superposition(2) -> superposition(1) -> bufprint 가 됩니다. bufprint에서는 하나의 tuple, 즉 (과 ) 사이에 나오는 값들을 출력해야겠지요. 이 값들은 superposition(3), 2, 1에서 다음 함수를 호출할 때의 i 값이 될 것입니다. 이 값들을 임시 배열에 저장해놓았다가 출력하시면 되겠지요.

    ex)

    int temp[SIZE]; 를 선언하시고

    superposition의 for loop 시작하자 마자 temp[SIZE-sel] = i; 를 쓰시고

    bufprint에서 temp 배열을 출력하는 방법을 사용할 수 있습니다.


    10년 전 link
  • Being
    Being

    질문에서 '출력부에 대한 아이디어'가 없으시다 하셨는데, 제가 보기에는 그보다는 재귀 함수가 어떻게 동작하는지에 대한 이해가 부족하셔서 해결하지 못하고 계신 것이 아닌가 싶습니다.


    10년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.