C책에보면 단골이 재귀호출인데요. 이거 실전에서 많이 쓰이나요? 메모리도 많이 잡아먹고 안좋을거 같은데..... :oops:
간단한 예로 Depth First Search 를 하는데
Recursive Call 로 짜면 매우 간단하게 짤수 있습니다.
하지만 Iterative Version 으로 짜게 된다면 다소 코드가 길어지며
복잡해 질수 있습니다.
물론 Depth가 일정수 이상 되면 Iterative Version 이 훨씬 빠른 속도를 냅니다.
하지만 그 이하의 Depth 를 보장 받는 다면 궂이 Iterative 하게 짤 필요가 없는것이죠.
제가 예전에 DFS 를 짜놓은것이 있네요. 참고하시라고;;
Recursive Versionhttp://sozu.pe.kr/moniwiki/wiki.php/DepthFirstSearchForGraph
Iterative Versionhttp://sozu.pe.kr/moniwiki/wiki.php/DepthFirstSearch-IterativeVersion
----------- 청하가 제안하는 소프트웨어 엔지니어로써 재미있게 사는 법http://sozu.tistory.com
제 개인적으로는
직관적으로 구현할 수 있는 경우가 많아서
쓸 수 있는 상황에선 굳이 피하지 않고 씁니다. -_-a
어디까지나 알고리즘 복잡도가 중요한게 아닐까요?
재귀호출로 구현한게 간단하다면 그걸로 하는거고 없이 하는게 간단하면 없이 하는거지 꼭 재귀호출을 써야 하거나 아니거나 하는건 아니라고 생각합니다.
물론, 타입 크리티컬한 부분이라면 알고리즘 복잡도 보다는 포퍼먼스 우선으로 하겠지만요.
퀵소팅 같은 경우 재귀호출이 알고리즘 복잡도를 낮춰주니깐 기본적으로 재귀호출하는 방식으로 구현하지만 함수콜의 시스템 부하때문에 재귀호출을 제거하는 방식을 이용하는 경우도 있고요.
쓰면 삶이 편해집니다 하지만 맘놓구 쓸순 없습니다 스택 오버플로우, 성능 등등
아직 익숙해지지 않아서 어렵게 느껴지는겁니다 익숙해지면 마구 쓰고싶은 유혹이 ㅡㅡ;;
-- 아쉬운 하루 되세요 --
실전에서도 재귀를 많이 씁니다. 걱정하지 마시고 마음껏 쓰세요.
"Iteration is humane, recursion is divine" - The C++ programming language에서
Life rushes on, we are distracted
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
^^
간단한 예로 Depth First Search 를 하는데
Recursive Call 로 짜면 매우 간단하게 짤수 있습니다.
하지만 Iterative Version 으로 짜게 된다면 다소 코드가 길어지며
복잡해 질수 있습니다.
물론 Depth가 일정수 이상 되면 Iterative Version 이 훨씬 빠른 속도를 냅니다.
하지만 그 이하의 Depth 를 보장 받는 다면 궂이 Iterative 하게 짤 필요가 없는것이죠.
제가 예전에 DFS 를 짜놓은것이 있네요. 참고하시라고;;
Recursive Version
http://sozu.pe.kr/moniwiki/wiki.php/DepthFirstSearchForGraph
Iterative Version
http://sozu.pe.kr/moniwiki/wiki.php/DepthFirstSearch-IterativeVersion
-----------
청하가 제안하는 소프트웨어 엔지니어로써 재미있게 사는 법
http://sozu.tistory.com
제 개인적으로는직관적으로 구현할 수 있는 경우가 많아서쓸
제 개인적으로는
직관적으로 구현할 수 있는 경우가 많아서
쓸 수 있는 상황에선 굳이 피하지 않고 씁니다. -_-a
어디까지나 알고리즘 복잡도가 중요한게 아닐까요?재귀호출로 구현한게
어디까지나 알고리즘 복잡도가 중요한게 아닐까요?
재귀호출로 구현한게 간단하다면 그걸로 하는거고 없이 하는게 간단하면 없이 하는거지 꼭 재귀호출을 써야 하거나 아니거나 하는건 아니라고 생각합니다.
물론, 타입 크리티컬한 부분이라면 알고리즘 복잡도 보다는 포퍼먼스 우선으로 하겠지만요.
퀵소팅 같은 경우 재귀호출이 알고리즘 복잡도를 낮춰주니깐 기본적으로 재귀호출하는 방식으로 구현하지만 함수콜의 시스템 부하때문에 재귀호출을 제거하는 방식을 이용하는 경우도 있고요.
쓰면 삶이 편해집니다하지만 맘놓구 쓸순 없습니다스택 오버플로우,
쓰면 삶이 편해집니다
하지만 맘놓구 쓸순 없습니다
스택 오버플로우, 성능 등등
아직 익숙해지지 않아서 어렵게 느껴지는겁니다
익숙해지면 마구 쓰고싶은 유혹이 ㅡㅡ;;
-- 아쉬운 하루 되세요 --
실전에서도 재귀를 많이 씁니다. 걱정하지 마시고 마음껏 쓰세요.
실전에서도 재귀를 많이 씁니다. 걱정하지 마시고 마음껏 쓰세요.
"Iteration is humane, recursion is divine"
- The C++ programming language에서
Life rushes on, we are distracted
댓글 달기