<p>//에졔 1.4<br>#include <stdio.h><br>void perm(char *list, int i, int n);<br>#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t)) <br>int main()<br>{<br> char list[3] = { 'a','b','c' };<br> perm(list, 0, 2);<br> <br>}</p> <p>void perm(char *list,int i,int n)<br>//*list[i]에서 list[n]까지의 모든 순열을 생성<br>{<br> int j, temp;<br> if (i == n) {<br> for (j = 0; j <= n; j++)<br> printf("%c",list[j]);<br> printf(" \n");<br> }<br> else <br> //list[i]에서 list[n]까지에 둘 이상의 순열이 있으면 이것을 순환적으로 생성<br> for (j = i; j <= n; j++) {<br> SWAP(list[i], list[j], temp);<br> perm(list, i + 1, n);<br> SWAP(list[i], list[j], temp);<br> }<br>}</p> <p>결과는</p> <p>abc<br>acb<br>bac<br>bca<br>cba<br>cab</p> <p>여기서 abc가 어떻게 나오는지 까지는 이해가 가는데 그 이후부터 어떻게 돌아가는지 모르겟습니다..</p> <p>perm(list,i+1,n)함수가 2번 재귀호출 된후 abc출력후 다시 돌아가는걸로 알고있는데..2번 되돌아 가야 하는걸로 아는데 1번째 되돌아 갈때 perm밑에 </p> <p>있는 매크로함수 swap를 실행하고 다시 되돌아 가는건지 그냥 바로 2번되돌아가서 perm함수 밑에 swap매크로함수를 출력하는건지.. 머리가 뒤죽박</p> <p>죽이네요.. ㅜㅜ<br></p>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.