디시인사이드 갤러리

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

갤러리 본문 영역

리커시브의 이해

===(123.108) 2010.11.01 14:34:23
조회 163 추천 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/20 - -
220022 아까 요청하셨던 자료구조 히프 짤입니다. [8] 형들아(220.73) 10.11.24 197 0
220021 나궁구미 한거있어요 뿌우 >< [2] 34(124.80) 10.11.24 44 0
220020 배열이랑 포인터랑 같은거면 하나로 만들면 되지 왜 따로따로 만들었나요? [3] 키사노바갤로그로 이동합니다. 10.11.24 69 0
220019 C에서 구조체는 왜 == 연산하면 컴파일 에러를 내는 건가요? [2] 키사노바갤로그로 이동합니다. 10.11.24 62 0
220018 그리고 프로그래밍이라는거 자체가. 원래 [5] 형들아(220.73) 10.11.24 115 0
220017 다중상속이 왜 개같은 문법인가요? [1] 별가사리(122.40) 10.11.24 85 0
220016 난 여성을 존중합니다. [2] ㅇㅇㅃ갤로그로 이동합니다. 10.11.24 118 0
220015 다른건 몰라도 컴퓨터 구조는 매우 중요하다고 생각합니다. [2] 형들아(220.73) 10.11.24 89 0
220014 내가봤을떄 우리가 북한할을 이길수있는 방법이 하나있어 있기는한데 [1] 김씨발(124.80) 10.11.24 45 0
220013 눈이 높다 [2] 이모군(1.225) 10.11.24 68 0
220012 컴퓨터 정보과의 커리큘럼은 뭔가 잘못되었다고 생각합니다. 뭔가 좀 전자적 [1] 형들아(220.73) 10.11.24 87 0
220011 프로그래머도 철학 잘 해야 하나요? 철학은 모든 학문의 근원이라던데. [2] 키사노바갤로그로 이동합니다. 10.11.24 79 0
220010 제가 최근에 현장실무 프로젝트를 나갔는데. 병원 관리 프로그램을 봤어요 [1] 형들아(220.73) 10.11.24 106 0
220009 함수형언어가 왜 인공지능 분야에 쓰이는거죠? [1] 키사노바갤로그로 이동합니다. 10.11.24 73 0
220008 JSP에다가요 LISP C 등등을 섞어가지고 존나 비벼서 [3] 형들아(220.73) 10.11.24 93 0
220007 콜백함수는 뭐하는거죠? OS는 만드는데 얼마나 걸리죠? [1] 별가사리(122.40) 10.11.24 52 0
220006 어셈블리어는 왜 여러가지 종류가 있나요? [3] 키사노바갤로그로 이동합니다. 10.11.24 85 0
220005 잘못된건 잘못된거인데 왜... [7] 일광면(119.198) 10.11.24 79 0
220004 자바하면 C랑 똑같다던데 진자인가요? [1] 키사노바갤로그로 이동합니다. 10.11.24 85 0
220003 내일 전쟁이 나더라도. 나는 한장의 꼴사를 올리겠다. [2] 형들아(220.73) 10.11.24 92 0
220002 C에서 struct랑 typedef랑 뭐하는 녀석인가요? [1] 키사노바갤로그로 이동합니다. 10.11.24 36 0
220001 C를 공부하다가 드는 생각인데요. 대체 객체지향과 일반 적인... [3] 형들아(220.73) 10.11.24 79 0
220000 진짜 내가 보자보자하니까 [1] 참치갤로그로 이동합니다. 10.11.24 43 0
219999 한가지 무서운건... [5] Minryu갤로그로 이동합니다. 10.11.24 88 0
219998 자바에서 나오는 JVM가기전에 중간어 있잖아요. 그게 C#에서는 어떤.. [1] 형들아(220.73) 10.11.24 81 0
219997 ★형들아훃을 응원합니다★ (5) [3] 키사노바갤로그로 이동합니다. 10.11.24 47 0
219996 전쟁나면 그래도 군인은 밥걱정없겠네 태양의나라 라고하는 영화봤냐? [7] 김씨발(124.80) 10.11.24 50 0
219995 C#에서 process해가지고뭐냐... 그 start 해가지고 막 하잖아 [1] 형들아(220.73) 10.11.24 64 0
219993 ★형들아훃을 응원합니다★ (4) [2] 키사노바갤로그로 이동합니다. 10.11.24 34 0
219992 ★형들아훃을 응원합니다★ (3) [1] 키사노바갤로그로 이동합니다. 10.11.24 37 0
219991 C#에서 delgate라는 개념이 이해가 안가는데요 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ [1] 형들아(220.73) 10.11.24 97 0
219990 금방 친구한테 전화가 왔는데 [4] 미클갤로그로 이동합니다. 10.11.24 71 0
219989 자바에서 오버라이딩과 오버로딩의 차이점은 무엇이있을까요? [1] 형들아(220.73) 10.11.24 105 0
219988 아닌건 아닌거지 [7] 개쉛기갤로그로 이동합니다. 10.11.24 71 0
219987 ★형들아훃을 응원합니다★ (2) [1] 키사노바갤로그로 이동합니다. 10.11.24 37 0
219986 ★형들아훃을 응원합니다★ [4] 키사노바갤로그로 이동합니다. 10.11.24 51 0
219985 c언어로 북한을 벌벌떨게하는방법없을까? [5] 김씨발(124.80) 10.11.24 94 0
219983 근데 다들 나 이렇게 도배하게 냅둘꺼? 나 짤려도 모른척할꺼? [3] 형들아(220.73) 10.11.24 77 0
219982 아 그래 난 아무리 여자를 욕해도... [4] 형들아(220.73) 10.11.24 86 0
219981 인터넷으로 싸워서 뭐해~ 난 생산적인 일을 하겠다~ [5] 형들아(220.73) 10.11.24 101 0
219980 다... 닥쳐!! 프... 프갤을 정리하겠다!! [9] 형들아(220.73) 10.11.24 125 0
219977 그런데 현재 비난의 대상이 [4] monoless갤로그로 이동합니다. 10.11.24 97 0
219976 편파적으로 보는게 아니라 사실이 그럼 [61] 별가사리(122.40) 10.11.24 194 0
219975 정말.. 말이 안나온다.. [13] 일광면(119.198) 10.11.24 128 0
219974 그런데 여자들 이런거 까야한다!! [5] monoless갤로그로 이동합니다. 10.11.23 93 0
219973 싸우지 마세요 [9] monoless갤로그로 이동합니다. 10.11.23 84 0
219972 [별사탕31] object link 명령 [3] 별사탕(115.20) 10.11.23 68 0
219971 밑에 글을 보니까 흠좀무....... [22] Minryu갤로그로 이동합니다. 10.11.23 162 0
219970 비주얼 C++ 6.0 컴파일 도중 중지되는거... [4] ㅎㅅㅎ(112.144) 10.11.23 53 0
219968 연예가 하고 싶다 [4] monoless갤로그로 이동합니다. 10.11.23 65 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2