디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

리커시브의 이해

===(123.108) 2010.11.01 14:34:23
조회 165 추천 0 댓글 3


위의 예제처럼 4개의 데이터를 가진 Linked list data가 있다고 해 보자. (서브스크립트는 그냥 순서를 나타내려고 붙임.)
위의 예제에서 동일한 데이터가 있는지 검색하려면 non-recursive 접근방식으론 이정도로 될 것이다.

DATA dataForFind; // 찾고자 하는 데이터

NODE* current = head;

for(;;){
  if(current->data == dataForFind){
     printf("찾았음");
     return;
  }
  else {
     if (current->next==NULL){
        printf("못찾음ㅋ");
        break;
     }else current = current->next;
}
return;

이정도가 될 거임.

recursive한 구현은?

int main(){
   ....
   if(recursiveFind(head, dataForFind))
      printf("찾았음");
   else printf("못찾음");
   ....
}

bool recursiveFind(NODE* current, DATA dataForFind){
   if(current->data == dataForFind){
        return true;
   else {
        if (current->next==NULL) return false;
        else 
           return recursiveFind(current->next, dataForFind);
   }
}

이렇게 하면 다음 노드에 대해 recursiveFind()함수 내에서 자신을 재귀호출함으로서 자식 노드에 대해 데이터가 맞는지 검사할 수 있고,
데이터가 있을 경우 연쇄적으로 재귀호출을 빠져나오면서 연쇄적으로 true를 리턴함으로서 최종 결과값은 true로 나오게 됨.
false일 경우도 마찬가지.

예를 들면, 세번째 노드에 찾는 데이터가 있다고 해 보자.
1. 첫번째 노드의 데이터와 찾고자하는 데이터가 맞는지 비교한다.
2. 아니니까 else문으로 넘어간다.
3. current->next가 널이 아니니까(다음 노드가 있으니까) 다음 노드에 대해 recursiveFind()를 재귀호출한다.
4. 다음 호출된 recursiveFind()에서는 2번째 노드가 current니까 2번째 노드의 데이터와 찾고자 하는 데이터가 일치하는지 비교
5. 역시 아니니까 else문으로 넘어가고,
6. current->next가 널이 아니니까 3번째 노드에 대해 recursiveFind()호출
7. 호출된 recursiveFind()에서는 3번째 노드 주소값이 current니까 3번째 노드의 데이터와 찾고자 하는 데이터가 일치하는지 비교
8. 일치하니까 true 리턴,
9. 이건 함수 속에서 함수를 콜했던 거니까 리턴해보니 아까 빠져나왔던 함수에서 받은 리턴값을 리턴하면 되네? 역시 true리턴
10. 여기도 마찬가지. true 리턴. 끝.

recursiveFind(head)
                     ->recursiveFind(다음노드)
                                                ->recursiveFind(다음노드)
                                                    찾았음!
                                                 <-return true
                       <-return true
<-return true

형태로 함수 콜이 이루어지겠지.

코드 라인을 하나 하나 따라가면서 머릿속으로 굴려보면서 이해해 보고, 사실 링크드 리스트는 unary tree로 생각해볼 수도 있으니
여기에서 변형하면 n-ary tree에서도 써먹을 수 있지.


여튼 끝

추천 비추천

0

고정닉 0

0

원본 첨부파일 1

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 시세차익 부러워 부동산 보는 눈 배우고 싶은 스타는? 운영자 24/05/27 - -
223997 이런 질문은 좀 그렇긴 한데 ㅋ [4] 팔로윌갤로그로 이동합니다. 10.12.11 55 0
223996 씨발 컴공은 전공공부도 개빡센데 [12] 팔로윌갤로그로 이동합니다. 10.12.11 266 0
223995 내가 가장 슬프면서 짜증날때... [1] 대마법서오즈갤로그로 이동합니다. 10.12.11 37 0
223994 디버그하는법 알려드립니다 [1] 꿀레갤로그로 이동합니다. 10.12.11 84 0
223993 아욱 토나온다 [154] 간장코딩갤로그로 이동합니다. 10.12.11 359 0
223992 혹시 여기에 전산관리 직종 종사하는 사람 없나? 머니머니(175.211) 10.12.10 52 0
223991 모든 경로에서 값을 반환하지 않습니다.(관련 소스 투척) [11] ㅇㅇㅇ(59.25) 10.12.10 100 0
223990 노트북 들고 다니면서 코딩하시는 형님들 노트북 추천좀 해주세요 [5] 와잉(116.125) 10.12.10 126 0
223989 리눅스 vim에디터 코딩용으로 최적화 설정 어떻게해요? [15] 마타버터갤로그로 이동합니다. 10.12.10 148 0
223988 집 말고 다른데서 쓸려고 코딩용으로 넷북이나 노트북 보는데 [2] 1234(123.109) 10.12.10 150 0
223987 열이 38도다 ㅡ; [5] 어떡해갤로그로 이동합니다. 10.12.10 95 0
223986 모든 제어 경로에서 값을 반환하지는 않습니다. [6] ㅇㅇㅇ(59.25) 10.12.10 9304 0
223985 내가 생각하는 프로그래머 발전 과정인데 이렇게 됨?? [13] ㄲㄲ(112.150) 10.12.10 134 0
223984 횽들아 우분투가 이상해짐 [1] 마타버터갤로그로 이동합니다. 10.12.10 62 0
223982 흠 이거 JAVA왜이러지... [9] 꿀레갤로그로 이동합니다. 10.12.10 111 0
223981 횽들 if문에서 막히는데 뭐가문제일까?? [7] ㅇㅇ(122.32) 10.12.10 66 0
223980 거실에서 쿡티비로 케이온보면 오덕인가요 [5] 꿀레갤로그로 이동합니다. 10.12.10 135 0
223979 형들 질문이 있는데요. 리눅스 공부 중요하나요?? [11] 형들아(220.73) 10.12.10 168 0
223977 횽들 코딩+동강용으로 넷북이나놋북 40아래로춫현좀 ㅠㅠ [6] 꿀하라><갤로그로 이동합니다. 10.12.10 129 0
223976 게임프로그래밍좀과외같은거받을데있나요? [4] 혹시(222.121) 10.12.10 372 0
223971 횽들 AVR Studio 좀 아는 형 있으셈? [5] 홍어라면 (222.104) 10.12.10 91 0
223969 가만히 생각해 봤는데 [1] ㅇㅇㅃ갤로그로 이동합니다. 10.12.10 79 0
223968 통큰이 서민들 다죽이네 [3] 미클갤로그로 이동합니다. 10.12.10 137 0
223967 프로세스 차단하는 프로그램 [4] 딸돌갤로그로 이동합니다. 10.12.10 207 0
223966 ATMega128로 Input 해본 횽들~ [6] 넉넉한터갤로그로 이동합니다. 10.12.10 122 0
223965 근데 C++로 웹에서 XML 핸들링하는거 만드는데 오래걸림? [4] Rei@디씨갤로그로 이동합니다. 10.12.10 108 0
223964 슬슬 저녁먹고 자야지 [1] DMW(125.138) 10.12.10 65 0
223963 홈페이지 만들줄 아는 옵빠들 있으면 봐주라 [11] 11(219.251) 10.12.10 157 0
223961 열혈강의 C 맨앞부분 .. [19] 이거왜이럼(121.134) 10.12.10 242 0
223960 DMW형왓음? 형 질문좀winapi <초특급킹왕짱기초적임> [3] 유리한추종자(120.50) 10.12.10 75 0
223959 짤을 바칠께 [2] elwlwlwk갤로그로 이동합니다. 10.12.10 134 0
223958 CPC광고 관련 사이트개발 기간은? [21] 좀도와줘!(211.117) 10.12.10 175 0
223957 끵;; 클라이언트가 자꾸 죽는다. 어떡해갤로그로 이동합니다. 10.12.10 49 0
223955 형들 급 초보적인 질문좀 할게요 ㅠ [4] CCC(125.180) 10.12.10 83 0
223953 아...치킨먹고 싶다 [1] DMW(125.138) 10.12.10 64 0
223952 니들 웹은 하지마라.. [4] 홍어(58.180) 10.12.10 135 0
223951 제가 차후에 대기업이나 중견기업에 취직할 수 있을지요??? [1] 기업(58.77) 10.12.10 93 0
223950 횽들 진로고민때문에 갈팡지팡.... [3] 불꽃(124.153) 10.12.10 112 0
223949 지금 SI업체에서 근무하는 횽들 있음? [1] Rei@디씨갤로그로 이동합니다. 10.12.10 144 0
223948 퇴근했다 [5] Rei@디씨갤로그로 이동합니다. 10.12.10 106 0
223947 다들 아이유 보러간듯.. 꿀레갤로그로 이동합니다. 10.12.10 69 0
223946 프갤죽었음? 꿀레갤로그로 이동합니다. 10.12.10 121 0
223945 느낀게 뭐냐면............................... [1] 하앍하앍(123.199) 10.12.10 74 0
223944 프갤을 분석해본다! [2] 꿀레갤로그로 이동합니다. 10.12.10 101 0
223943 아 - 는 반칙임.. [3] new gay[max](183.105) 10.12.10 110 0
223942 프로그래밍하는데 커맨드창에서(명령프롬프트창에서) 너무느려요ㅜㅜ [3] ㅜㅜ(218.148) 10.12.10 83 0
223940 udp패킷 손실율이 대강 어느정도임? [4] ㅂㅂㅂ(119.196) 10.12.10 182 0
223937 10분이따 튀근해야지 [2] DMW갤로그로 이동합니다. 10.12.10 73 0
223936 영상처리 임계치 질문입니당; 일광면(61.100) 10.12.10 58 0
223935 금요일을 정리하는 노래 꿀레갤로그로 이동합니다. 10.12.10 48 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2