Open utterances-bot opened 3 years ago
좋은 글 감사합니다!
함수형 언어에서는 유난히 재귀호출을 많이 사용해서 개인적으로 위험?을 느낍니다. 스택오버플로 발생할까봐. . 왠만하면 재귀호출을 쓰지 말라 하는 편인데. cpp만 해서… 클로저에선 재귀호출을 사용하면 컴파일러가 스택오버플로 발생하지 않게 일반적인 루프로 만들거나 스택 크기를 키워서 이 문제를 방지하는 건가요?
@zno5 님 안녕하세요! 함수형 프로그래밍을 지원하는 언어들은 기본적으로 tail-recursion(꼬리재귀)를 지원하여 스택의 크기를 키우지 않고 사용할 수 있습니다.
Clojure의 경우는 기본적으로 JVM 위에서 올라가는 언어입니다. 그렇기 때문에 이런 꼬리재귀를 기본적으로 제공하지는 않지만 특별한 키워드 recur
를 제공하고 있습니다.
이 recur
를 이용한 재귀는 스택에 부담이 없습니다.
위 코드에서는 이해를 돕기 위해 함수 이름을 직접적으로 호출하는 재귀함수를 만들었지만
실제로는 이 recur
함수를 이용한 재귀를 많이 사용합니다.
관련 링크를 함께 공유드리겠습니다. https://clojure.org/about/functional_programming#_recursive_looping https://clojure.org/reference/special_forms#recur
예상하시는게 맞지 않을까요?! ^^;; 폴 그레이엄은 수필가라고도 하더라고요. 현재도 꾸준히 한달에 1~2개씩 글도 올라오고 있더라고요. http://www.paulgraham.com/articles.html
왜 폴 그레이엄은 회사 이름을 Y Combinator라고 지었을까 - 컬리 기술 블로그
http://thefarmersfront.github.io/blog/y-combinator/