Dil2
53
2021-03-16 17:24:36
15
866

재귀함수..


코딩 한창 배우고 있는 사람입니다..
취업을 위해 알고리즘 공부 계속 하고있는데 실업무에서 재귀함수가 많이 쓰이는지 궁금합니다!
( 재귀함수 엄청 어렵네요... )
0
  • 댓글 15

  • defult
    9k
    2021-03-16 17:31:40

    그때그때 다릅니다.


  • 도각도각
    3k
    2021-03-16 17:35:40

    많이 쓰이지는 않아도 쓰이긴하죠.

  • allinux
    1k
    2021-03-16 18:26:43

    재귀함수로 처리할 수 있다는 것은 반복구조라는 이야긴데 보통 재귀형태로 풀면 반복문보다 코드도 간결해지고 이해하기도 좋습니다. 

  • 한식
    1k
    2021-03-16 18:59:52

    쓰일일도 있고 안쓰일 일도 있죠. 

    직접 적용할땐 좀 헷갈릴수도 있긴한데, 개념자체는 어렵지 않아요.

    저같은경우는 자식노드 인덱스를 알고있는 인덱스벡터를 받아와서 재귀함수로 하이어라키 출력하는데에 사용했습니다. 간단한 DFS문제라고 할수있죠.. 

  • ceastgun
    2k
    2021-03-16 19:29:04

    트리뷰 같은거 탐색하려면 필수죠.

  • allinux
    1k
    2021-03-16 20:30:50

    재귀를 tail recursion 을 통해 반복 형태로 최적화할 수 있어서 단순히 느리다고 할 순 없습니다.

    또한 멀티코어 시대에 함수형 프로그래밍은 필수이므로 재귀호출을 잘 활용하는 방법은 중요하다고 할 수 있습니다. 

  • John Suhr
    4k
    2021-03-16 20:56:06

    노드 다룰 때는 거의 필수입니다. 부모/자식 관계의 노드에서 트리를 구성하려면 재귀 없이 코딩이 거의 불가능합니다.

  • setPayPeriod
    935
    2021-03-16 23:07:56

    트리뷰, 폴더뷰, HTML Element child nodes, BOM, 댓글의 댓글 대댓글등 많은곳에서 쓰이져.

    물론 꼭 재귀로 해야되는건 아닙니다.

    요즘은 쿼리로 한방에~!

  • allinux
    1k
    2021-03-16 23:22:01

    지금은 컴파일러나 런타임에서 해주는 것을 최대로 누리는 시대이고 그래야 합니다. 컴파일러, 런타임 모두 그렇게 생산성을 위해 발전해왔습니다. 지금의 언어들이 함수형 기능을 계속 받아드리고 추가하는 것도 같은 맥락입니다.

    tail call optimization(TCO) 도 오래된 주제이고 모던한 언어 및 런타임은 지원하는 기능입니다. 물론 TCO가 지원안되는 환경이라면 단점들이 크기 때문에 재귀호출은 제대로 사용하기 힘듭니다. 

    그리고 일반프로그램(?)이 어떤 종류인지는 모르겠지만 게임, 영상처리, 각종데몬등 다수개의 코어로 cpu가 생산되는 지금 멀티코어를 활용한 프로그래밍 및 (컴파일러, 런타임)지원은 이제 필수입니다. 

  • allinux
    1k
    2021-03-16 23:49:30

    간단한 예로는 지금의 (함수형을 지원하는)언어들은 컬렉션에 parallel 을 지원하고 있습니다.

    대표적으로 parallel collection을 들 수 있겠는데요. 컬렉션에 많은 데이터가 있다고 할 때 이것을 메소드 하나로 병렬적으로 멀티쓰레드등을 활용하여 병렬적(다수의 코어를 활용하여)으로 처리할 수 있도록 합니다. 자바에서 parallelStream 이나 스칼라의 parallel collection 이 대표적인 예가 될 수 있겠고 c#에서도 System.Collections.Concurrent 네임스페이스가 제공됩니다.  

    컬렉션을 사용안하는 업무는 없을테니 활용여부를 구체적으로 적진 않겠습니다. "코딩독학"님은 활용해 본적이 없다고 하지만 사용하시는 런타임에서는 이미 활용하고 있을지도 모릅니다. go의 고루틴을 사용한다던지 한다면 이미 사용하고 있는 것이죠. 

  • allinux
    1k
    2021-03-17 00:14:23

    간단하게는 작업관리자나 top 등의 cpu 지표를 보면 되겠지요.

    자바에서라면 모니터링 관련 api(jmx) 를 활용하면 되겠구요. jdk 에 내장된 visualvm 의 도구로도 cpu등의 사용률은 얻을 수 있습니다.

  • allinux
    1k
    2021-03-17 00:30:17

    그건 잘 활용하는 문제이겠죠.

    제가 코멘트를 남긴 것의 핵심은 지금은 멀티코어 시대이고 그에 따라 컴파일러, 런타임도 이미 대응하고 있으며 개발자들도 필수적으로 멀티코어를 잘 활용하는 능력을 키워야 된다는 겁니다.

  • allinux
    1k
    2021-03-17 00:52:17

    아쉬워도 할 수 없습니다.(솔직히 능력이 안됩니다.^^;) 그리고 해당쓰레드에 동떨어진 이야기를 적는 것도 실례구요.

    또한 저 역시도 필요성을 늦게나마 인지하여 학습중인 아직 한참 부족한 직장인일뿐입니다.

    컴파일러가 잘 알아서 해주겠지 <-- 기본적으로 이런 마인드를 가지고 있는 것이 틀리다고 못하겠습니다. 그 영역은 또 그 영역의 전문가들이 개선할 영역 아니겠습니까?

  • 한식
    1k
    2021-03-17 08:25:17
    믿음이 있는건 중요하지요.. 뭔가 기반이 있어야 프로그래밍할테니까요
  • 거신
    842
    2021-03-17 10:13:29

    프로그래밍의 모든 알고리즘이 어떤 실무에서 모두 사용되진 않습니다. 윗분들 말씀대로 케바케입니다.

    그런데 쓰든 안쓰든 해당 알고리즘을 알고 있는 것과 모르는 것, 사용할 줄 아는 것과 모르는 것은 나중에 분명한 차이가 나게 됩니다.

    내가 입사했는데 이전까진 실무에서 안썼었는데 내가 들어갔는데 쓰기 시작하더라. 그런 경우도 허다하죠.

  • 로그인을 하시면 댓글을 등록할 수 있습니다.