haskell을 공부하고 있는 학생입니다. 도움이 필요합니다.

ozon1000의 이미지

저는 c / c++을 공부할때도 정말 재귀함수를 어려워 했고 지금도 굳이 재귀로 하지 않아도 되는것들은 일부러라도

재귀함수를 사용하지 않으려고 합니다.

하지만 haskell은 다르더군요. 아에 재귀함수 범벅입니다... 정말...
그래서 현재 haskell을 공부하는데 있어 어려움이 많습니다.

혹 고수님들 중에..

implicit recursion 과 explicit recursion 의 차이점을 명확하게 알고 계신 분 계신가요?
계시면 명쾌하고 무릎을 탁! 치고 갈만한 설명 한번 부탁 드립니다... ㄸㄹㄹ

세벌의 이미지

일단 무릎을 탁 치십시오. 그럼 명쾌해 졌나요? 재귀함수 개념을 어렵다 하시면 무슨 설명을 본들 이해하겠습니까?
저는 고수가 아니라서 implicit recursion 과 explicit recursion 구글님께 물어보니
https://www.joachim-breitner.de/blog/316-Handling_explicit_and_implicit_recursion_in_Haskell_data
이런 걸 알려주네요. 영어라서 어려우신가요? 영어에 익숙해지셔요.
고수님들은 바빠서 답변을 해 주실 분이 계실지는 잘 모르겠네요.

ozon1000의 이미지

다음엔 이런식으로 답글 다시지 마셔요~ㅋㅋㅋㅋㅋㅋㅋㅋ
고수 아니라면서요ㅋㅋㅋㅋㅋㅋㅋㅋ

akayong의 이미지

implicit recursion 은
재귀 함수 안에서 또 재귀함수를 호출 하는
즉 내부에서 또 호출을 해야 하는 경우고

explicit recursion 은
재귀 함수 안에서 재귀함수를 또 호출 하는게 아니라.
내부에서 다른 어떤 행동을 반복적으로(?).. recursive하게 하는거. 정도라고 생각 하시면 될까요

하노이의 탑.. 은 아실거라고 생각 하고 말씀 드리면

function hanoi(int n) {
 
 if(n==1)
    return 1;
  else 
    return 2*hanoi(n-1) + 1;
}

이런식으로.. hanoi 함수 안에서 또 hanoi 함수를 호출 하는게 implicit

function hanoi(int n) {
  return pow(2,n)-1;
}

즉. 2의 n승을 계산 (2를 recursive하게 n번 곱함). 이게 explicit.
내부에서 또 다른 recursive함수를 호출 하는건 아니죠..?

음.. 이거 먼가 엄청 옛날에 얼핏 본거 같은데. 정확한 기억인지는 모르겠네요.
전 대충 이런 개념으로 알고 있습니다.

이게 정확한 예는 아니겠지만....

무튼, implicit은 뜻 자체가 "내포된" 이런 뜻이자나요.
한 함수안에서 계속 내부적으로 recursive하게 또 그 함수를 호출 하는 경우인거고

explicit은 뜻 자체가 "명확한" 이런 뜻이자나요.
안에서 뭔가 recursive하게 작동은 하는데, 그게 안에 함수같은게 또 포함되서 뭔가 명백히 알 수 없는 경우가 아니라
recursive하게 작업은 하는데, 명확히 이해 할 수 있는? 뭐 그런 거 아닌가요..

제가 이해한건 이거에요..

자세한 정답은 아마 다른분께서..

ozon1000의 이미지

말씀하신 글로만 보아서 implicit recursion 은 제가 재귀라고 머릿속에 딱 떠올리는 그대로의 재귀함수를 말하는 말이네요?
즉 아주 일반적인 재귀함수요.
그리고 explicit recursion 은 재귀함수는 맞으나 단순히 재귀적인 동작만 하는게 아니라 추가적인 다른 동작도 함께 하는 함수를 말하는 말이네요?

즉, 댓글 맨 마지막에 언급하신데로
명백히 알 수 있는 / 명백히 알 수 없는
이라고 해석하면 될거같은데.. 제가 잘 이해 했나요?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.