물론 재귀보단 반복문이 코스트가 덜한데...
그 코스트 덜쓰는만큼 가독성이 안좋아지고
재사용성도 떨어짐.
어쩌다 쓰이거나 반복문으로 했을때 보기에 좋으면 반복이지만...
그게 아니라면 재귀가 맞지.
일례로 트리에서 노드 파싱하는 대부분의 코드들은 재귀로 짜여져 있음. 이걸 반복으로 하는 순간
코드 알아보기 떡같고 예외처리 떡칠해서 개짱나게됨.
뭐 그만큼 성능이 중요하다라고 한다면 말 없지만
현대 프로그래밍 개념에선 머신 성능을 무제한으로 놓고 보기 때문에.. 혹은 컴파일러가 옵티마이징 해주기때문에 크게 차이는 안남.
결론.. 꼴리는대로 쓰는데 자주쓸꺼면 재귀로 해
그 코스트 덜쓰는만큼 가독성이 안좋아지고
재사용성도 떨어짐.
어쩌다 쓰이거나 반복문으로 했을때 보기에 좋으면 반복이지만...
그게 아니라면 재귀가 맞지.
일례로 트리에서 노드 파싱하는 대부분의 코드들은 재귀로 짜여져 있음. 이걸 반복으로 하는 순간
코드 알아보기 떡같고 예외처리 떡칠해서 개짱나게됨.
뭐 그만큼 성능이 중요하다라고 한다면 말 없지만
현대 프로그래밍 개념에선 머신 성능을 무제한으로 놓고 보기 때문에.. 혹은 컴파일러가 옵티마이징 해주기때문에 크게 차이는 안남.
결론.. 꼴리는대로 쓰는데 자주쓸꺼면 재귀로 해
학교에서 재귀함수 잘쓰지말라고하는데 이유설명좀
학교에선 로직이해를 해야하니.. 그리고 전통적인 관점에서 가르치니깐 그런거지...
나도 상황에 따라 다르게 쓰지만..우선 재귀로 짠 후에 리팩토링 시점에서 반복으로 돌리거나 함... 확실한건 자주쓰는건 재귀로 남겨놔야 나중에 또 씀
근데 확실히 재귀로짜야 깔끔하게 떨어지는부분이 많이있음 특히 반복문에서 조건으로 다음분기로넘어가야할때는 재귀가 김왕장
원칙적으로 로직이 이전 state로 복귀하는 경우가 없다면 재귀는 시간적으로나 공간적으로나 낭비다. 코드 가독성이 문제가 될정도로 재귀와 반복문 코드가 상이한 경우는 거의 없다. head코드와 tail 코드만 차이가 나기 때문.
맞아 LL파싱트리 재귀로 안짜면 머리 터진다.