자료구조 공부 전에 반드시 알아야 할 재귀호출

Поделиться
HTML-код
  • Опубликовано: 10 янв 2025

Комментарии •

  • @marindorrobin3878
    @marindorrobin3878 2 года назад +7

    재귀호출은
    1. For문과 비슷하다.
    2. Stack을 사용하기 위함이다.
    - 변수들을 stack이 관리한다.
    3. For문은 2차원 트리구조를 못한다.
    4. 탈출조건을 만나야 그 동안 stack에 쌓인 것들을 해소한다.
    5. (방법은 잘 모르겠지만) 이진트리에서 자식을 탐색하고 다시 부모로 돌아오는데는 for문은 불가능하지만 재귀호출은 이것이 가능하다.
    6. Stack의 크기는 1MB 남짓이다.
    생각을 잘 해야한다.
    감사합니다!

  • @이름이중요해-l3p
    @이름이중요해-l3p 2 года назад +7

    정말 알면알수록 신기한 채널 모르는 부분 부족한 부분만 정확히 골라주십니다! 잘보겠습니다!❤

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  2 года назад +1

      좋은 평가와 피드백 감사합니다. 음...그리고 제가 정확히 골랐다기 보다는...대부분 이런 내용들을 이해하기 어려워 합니다. 저도 그랬고요. 다 비슷비슷 하답니다. ^^

  • @jhd7130
    @jhd7130 2 года назад +3

    와 재귀는 메모리에서 메서드 호출할 때 쌓이는 stack 영역을 이용하기 위해 사용한다.... 대박이네요... 진짜.. for문과 비교 설명도 너무 좋습니다 선생님!!!!!

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  2 года назад

      좋은 평가와 피드백 감사합니다. 이해가 잘 되신 것 같아 강사로써 매우 흡족합니다. ^^

  • @local-q5c
    @local-q5c 2 года назад +4

    재귀를 사용하면 현재 풀어야 할 문제에만 집중 할 수 있는 느낌이 들어서 매우 좋더라고요!

  • @윤성현-g9s
    @윤성현-g9s 2 года назад +2

    제가 지금까지 봤던 재귀호출 설명중에 가장 쉽고 이해가 잘 됐습니다. 감사합니다!

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  2 года назад +1

      좋은 평가 감사합니다. 제가 설명을 잘했다기 보다...VS Callstack이 열일 하는 것이라 생각합니다. 그 화면만 잘 보고 따라가면 실수를 대폭 줄일 수 있습니다. ^^

  • @moniteer1229
    @moniteer1229 2 года назад +2

    재귀함수 라는게 참 거지같은데 반드시 알아야하는… 좋은 강의 감사합니다.

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  2 года назад +1

      아쉽지만 익숙해져야 합니다. 재귀호출은 매우 중요합니다. ^^

  • @azerty7589
    @azerty7589 2 месяца назад

    양질의 강의에 감사드립니다!

  • @vasilyivanovickaminski
    @vasilyivanovickaminski Год назад

    이제야 제대로 된 코딩을 할 수 있겠네요... 학교에서도 가르쳐주지 않는 걸 유튜브로 배웁니다 감사합니다

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Год назад

      좋은 평가 감사합니다. 좋은 결과 얻으시기를 바랍니다.

  • @니멤이댜
    @니멤이댜 2 года назад

    드디어 시작했습니다. 열심히 해보겠습니다.

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  2 года назад

      끝까지 잘 마무리하시기 바랍니다. 건투를 빕니다!

  • @yhskrrrrrrr
    @yhskrrrrrrr 2 года назад

    a=0 이라는 값에 의해
    스택에 쌓여있는 함수가 pop 되는건가요?
    그러면 a는 단순 반환조건이고
    함수는 스택에서 빠져나오기 전에 *반환형이 있다면 반환을 해야되니까 return 구문이 실행* 되고
    return 에 의해 값들이 반환되는거네요??

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  2 года назад +1

      Call stack은 함수가 반환할 때 해제됩니다. 그리고 보통 반환 값은 CPU 레지스터에 저장됩니다. 참고하시기 바랍니다.

  • @4song997
    @4song997 2 года назад

    강의 감사합니다!

  • @jamespark5823
    @jamespark5823 2 года назад +1

    좋은 영상 잘봤습니다 ㅎㅎ

  • @andodesjoke8742
    @andodesjoke8742 2 года назад +1

    간단한 재귀 문제는 쉬운데 어려운건 너무 어려운데 연습밖에 답이 없겠죠...

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  2 года назад +2

      아쉽지만 연습이 답이 맞죠. 머리로는 알고 있으나 참 인정하고 싶지 않은 진실같습니다. 가장 좋은 연습은 예제 작성하다 오류나고 그 오류를 수정하고자 디버깅 화면 하나씩 따라가고 메모리까지 직접 조사하는 것입니다. 이런 부분은 온라인 강의로 해결하기가 참 여러운 부분이라 고민입니다. 아무튼 막히면 언제든 질문 올려주시기 바랍니다. 감사합니다. ^^

  • @praymeta9428
    @praymeta9428 2 года назад +2

    1등 한번 해보고 싶었습니다. 열심히 보겠습니다~

  • @jaekunyoo8509
    @jaekunyoo8509 Год назад

    안녕하세요. 감사히 잘 봤어요.
    재귀함수 작동방식은 이해하고 있어요. call stack을 활용하기 위해서라는 목적이 있다는 것은 왕초보이기에 처음 들었는데, 12일 동안 공부한 중에 stack은 함수 실행을 위해 지정된 기억공간에서 스택영역으로 알고 있고, 어느 함수가 호출되면 이 영역에 stack frame이 밀어넣어져서 그 함수의 변수 등 관련자료들이 저장되고 실행완료후 제어권을 호출자에게 반환하면 해당 함수의 stack frame이 빼내져서 소멸되고, 이 영역의 구조가 왕복?구조가 아니라서 처음 들어간 단위 위에 계속 쌓여서 위 단위부터 빠져야 비워 질 수 있다고 알게 됐어요.
    call stack은 무엇인가 검색하여 공부했더니 위 내용과 같다고 몇 저자들의 글을 보았고 stack frame에 반환 주소가 저장되어 반환시 중요하게 사용된다는 점을 알게 됐어요. 종료후 그 주소로 무엇을, 왜 보내는지는 아직 찾아보지 않았어요. 그냥 끝나면 되는게 아닌가 보네요.
    call stack 명칭도 제가 알고 있는 stack area는 안나오고 같은 명칭으로 위키에서는 '콜 스택(call stack)이란 컴퓨터 프로그램에서 현재 실행 중인 서브루틴에 관한 정보를 저장하는 스택 자료구조이다. 또한 실행 스택(execution stack), 제어 스택 (control stack), 런 타임 스택 (run-time) 스택 혹은 기계 스택 (machine stack) 이라고도 하며, 그냥 줄여서 스택 (the stack) 이라고도 한다'라고 소개하고 어느 글에서는 program stack이라고도 부른다고 소개했어요.
    main함수부터 시작하니 첫 stack frame이 생기고 실행중 다른 함수 호출하면 그 위에 stack frame이 더 생기는 식의 적재 구조이고, 재귀함수는 다른 인자들로 반환문을 만나는 자신까지 계속 생기고 그 이후 나머지 명령 수행후 종료되면 그 자신의 마지막 stack frame 빼내는 반복으로 main함수로 제어권 돌려주는 완전? 종료하면 main함수의 stack frame만 남아 이후 명령 실행후 종료하면 문자, 자료, 동적?, 적재공간들이 할당된 전체 기억공간이 소멸되겠지요.
    궁금한 것은 이런 과정에서 어느 것, 어느 과정, 혹 어떤 다른 무엇을 왜, 어떻게 사용하는지 전혀 추측이 안돼요.
    이진트리는 아직 모르는데 하위 진행했다가 상위로 왕복하는 경로만 생각한다면, 반복문은 일방 반복이니 당연히 불가하고 재귀함수는 왕복하니 가능하겠지요. 댓글 달고 생각이 났는데 반복문으로 반환문 만나러 가서 다음 반복문을 하나 더 써서 원 상태로 오게 할 수 있는지, 가능해도 목적에 맞는지 궁금하네요.
    파이선에서 재귀함수 처음 봤을 때 이해는 안되는데 갔다가 온다는게 신기했어요. 이후 확실하지 않게 이해했는데 C언어 공부하며 명확해졌어요.
    할 것들이 여럿 있는데 C언어에 빠져서 큰일이에요. 30년전에는 막연히 어려운 것으로만 여겨서 배울 생각도 못 했는데, 이렇게 재미있을 줄은 전혀 상상을 못 했어요. 나라는 버리셨어도 겨레는 안 버리셨기를, 겨레를 살리시기 위해 나라를 버리셨기 바라는 김소월 님의 싯구와 그 대학가요제 노래가 어제부터 계속 뱅뱅 돌아요. 많이 듣던 곡인데 그룹이 생각안 나서 지금 검색하니 '라스트 포인트'이네요.

    제 이해 내용이 맞는지와 의문을 알려주시면 감사하겠어요.
    2023년 8월 19일 토 11시50분

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  Год назад +1

      스스로 왕초보라고 하셨는데...제가 보기엔 결코 아닌 것 같습니다. 일단 스택 공간은 크기가 정해져 있습니다. 할당된 공간은 소멸하지 않습니다. 스택을 사용하는 스레드가 종료될 때까지 메모리는 그대로 유지 됩니다. 그리고 스택의 크기는 컴파일 타임에 결정됩니다.
      관련 이론에 대해서 단순하게 설명 할 수 있으면 좋겠지만 애석하게도 쉽지 않습니다. 참고하시기 바랍니다. :)

    • @jaekunyoo8509
      @jaekunyoo8509 Год назад

      ​@@nullnull_not_eq_null
      ​​​
      안녕하세요. 답변 주셔서 감사합니다.
      초보라도 깊이 알려는 성격과 맞물려 재미도 커서 빨리 접근할 수 있어서 그렇게 보시는 것 같아요.

    • @user-rmsidv1rhs
      @user-rmsidv1rhs 10 месяцев назад

      반도체 소자의 특성과 컴퓨터는 전기신호로 구동된다는 것의 의미를 조금 이해하신다면 그걸 굴리기 위해 소프트웨어는 무슨 작업이 필요한 지, 왜 이런 식으로 소프트웨어를 구성했는지에 대해 이해가 도움이 될 거라고 생각합니다.

  • @판도리아
    @판도리아 2 года назад

    재귀호출은 본능적으로 하는 거라고 생각합니다

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  2 года назад

      음...디버거로 잘 따라가보세요. 조금 귀찮을 수 있지만 그렇게 따라가보면 충분히 이해할 수 있습니다. ^^

  • @sungjuyea4627
    @sungjuyea4627 2 года назад +1

    재귀는 언제봐도 헷갈립니다 ㅠ

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  2 года назад +1

      재귀호출 함수의 return문에 브레이크 포인트를 세트하고 하나씩 따라가면서 매개변수 값의 변화를 잘 관찰해보기 바랍니다. ^^

    • @sungjuyea4627
      @sungjuyea4627 2 года назад

      @@nullnull_not_eq_null 조언 감사드립니다 ㅎㅎ

  • @jhd7130
    @jhd7130 2 года назад

    선생님 갑작스러운 질문인데 c++로 해도 되나요?😁

    • @nullnull_not_eq_null
      @nullnull_not_eq_null  2 года назад

      네, 상관없습니다. 사실 C++가 여러 면에서 더 유리하지요. ^^