대답 1:

다른 답변의 내용에도 불구하고 그렇습니다. 프로그래머는 수학자와 재귀라는 용어가 약간 다른 것을 의미합니다.

그러나 더 정확하게 말하면, 순수한 언어가 아닌 프로그래머는 "재귀"라는 용어를 사용할 때 순수한 언어의 프로그래머와는 조금 다른 의미를 갖습니다. 순수한 언어의 프로그래머는 수학자와 정확히 같은 의미입니다.

그리고 근본적인 이유는 프로그래머와 수학자가“기능”에 따라 다른 의미를 갖기 때문입니다.

수학에서 "함수"는 항상 순수합니다. 인수에서 결과로만 매핑되기 때문에 일부 인수에서 함수의 결과를 요청할 때마다 결과는 동일합니다. 피보나치 재귀 f (n) = f (n-1) + f (n-2)가있는 경우 f (n)의 정의에서 f (n-2)의 값을 요인으로 안전하게 재사용 할 수 있습니다. f (n-1)의 정의에서. 이것은 순수한 프로그래밍 언어에서 "function"이라는 단어와 "function"이라는 단어의 의미와 정확히 동일합니다.

f n = n <= 1 인 경우
그런 다음 1
그렇지 않으면 f (n-1) + f (n-2)

Haskell에서 (예, Haskell로 작성해야하는 방식이 아니라 Haskell 이외의 사용자에게 친숙 함을 더 많이 선택합니다)이 코드는 O (n)에서 실행됩니다. f가이 단어의 수학적 의미에서 정확히 "함수"이기 때문에 O (n)에서 실행됩니다. 즉, f (n)은 주어진 n에 대해 항상 동일한 순수한 값이므로 각 f (i) 결과는 다음과 같이 계산됩니다. 그런 다음 계산 오버 헤드없이 다른 곳에서 재사용 할 수 있습니다.

그리고 위에서 정의한 Haskell "재귀"는 수학 "재귀"f (n) = f (n-1) + f (n-2)와 정확히 같은 의미입니다.

반면에, 순수하지 않은 언어에서는 기능의 본문이 부작용을 일으킬 수 있기 때문에 "기능"의 의미가 다릅니다. 내가 쓰면

int f (int n) {
(n <= 1)이면 1을 리턴하고;
리턴 f (n-1) + f (n-2);
}

C ++ / Java / etc에서 이것은 Haskell 예제와 다른“재귀”의 의미입니다. 이것은 각 n에 대해 f를 여러 번 호출하여 전체 O (2 ^ n) 호출을 발생시키는 재귀입니다. "기능"으로 프로 시저를 의미하는 경우 재귀 본문에 프로 시저가 두 번 나타나는 경우 프로 시저를 두 번 호출해야하기 때문입니다.

따라서 순수한 언어가 아닌 언어의 프로그래머가“기능”이란 의미는 결과를 만들어 내고 부작용을 수행 할 수있는 절차입니다. 프로 시저 자체는 중요하며 (부작용이있을 수 있으므로) 동일한 인수에서 프로 시저를 두 번 호출하는 프로그램은 한 번 호출하는 프로그램과 다른 값을 생성 할 수 있습니다. 재귀는 함수가 자신에 의존하는 경우이므로 재귀는 프로 시저가 자신을 호출하고 결과를 사용하는 상황임을 의미합니다.

순수한 언어와 수학자의 프로그래머가“기능”이 의미하는 것은 순수한 절차의 결과이며 (부작용없이) 결과는 순수한 결과를 내기 위해“만”필요하기 때문에 절차 자체는 무관합니다. 따라서 "재귀"는 함수 정의 자체의 "호출"이 아니라 서로에 따른 결과만을 의미합니다.

순수한 언어는 드물고 순수하지 않은 언어가 널리 보급되어 있기 때문에 상황을 "프로그래머는 수학자와 다른 의미"로 단순화하는 것이 안전합니다.


대답 2:

엄격하지 않은 답변은 여기에 있습니다.

수학과 계산의 비교 (또는 "프로그래밍")를 살펴볼 때 "당나귀가 운반 할 수있는 부하"(만약 충족 될 수 있음)를 찾을 수 있습니다. 이것은 Curry-Howard 서신-Wikipedia에서 시작되었으며 수학과 계산은 거의 동의어입니다. 또한 Homotopy Type Theory 및 Univalence Axiom에 이르기까지 사다리에 도달하면 대응 관계가 기하학, 계산, 이론 설정 및 대부분의 수학에 적용된다고 가정 할 수 있습니다.

TL; DR : 약간 다른 용도로 사용하더라도 동일합니다.


대답 3:

프로그래머와 수학자가 "재귀"에 대해 말할 때 다른 의미가 있습니까?

나는 그렇게 생각하지 않습니다.

튜링, 교회, 고델 등 컴퓨터 과학을 발전시킨 초기 사람들은 수학자 였다는 것을 명심하십시오.

괴델은 불완전 성 이론으로 주로 알려져 있지만, 재귀 함수 이론에 대해 엄청난 노력을 기울였다. 그는 튜링이 그의 유명한 작업에서했던 것과 같은 문제 (데이비드 힐버트 (David Hilbert))를 해결하려고 노력했고, 본질적으로 그의 재귀의 기초로 일반적인 재귀 함수를 사용했습니다. 일반적인 재귀 함수는 계산 모델이므로 컴퓨터 과학 및 프로그래밍과 밀접한 관련이 있습니다.

어려운 점은 대부분의 프로그래머, 특히 컴퓨터 과학에 대한 배경 지식이없는 사람들은 다음과 같이 재귀 적 정의의 수학 사이에 연관성이 없다는 것입니다.

F0=F1=1Fn=Fn1+Fn2F_0 = F_1 = 1\\
F_n = F_{n-1} + F_{n-2}

와 같은 재귀 함수 정의

데프 피브 (n)
  n == 0 인 경우 || n == 1
    1
  그밖에
    fib (n-1) + fib (n-2)
  종료
종료

Haskell과 같은 기능적 언어에서 더 명확합니다.

fib :: Nat-> Nat
fib 0 = 1
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

하스켈은 관계를보다 명확하게하기 위해 고안 되었기 때문입니다.

물론 프로그래밍 예제가 더 길면 관계를 파악하기는 어렵지만 기본적으로 존재합니다.

물론 이것은“하지만 프로그래밍은 수학입니다!”캠프에서 나옵니다.


대답 4:

프로그래머와 수학자가 "재귀"에 대해 말할 때 다른 의미가 있습니까?

나는 그렇게 생각하지 않습니다.

튜링, 교회, 고델 등 컴퓨터 과학을 발전시킨 초기 사람들은 수학자 였다는 것을 명심하십시오.

괴델은 불완전 성 이론으로 주로 알려져 있지만, 재귀 함수 이론에 대해 엄청난 노력을 기울였다. 그는 튜링이 그의 유명한 작업에서했던 것과 같은 문제 (데이비드 힐버트 (David Hilbert))를 해결하려고 노력했고, 본질적으로 그의 재귀의 기초로 일반적인 재귀 함수를 사용했습니다. 일반적인 재귀 함수는 계산 모델이므로 컴퓨터 과학 및 프로그래밍과 밀접한 관련이 있습니다.

어려운 점은 대부분의 프로그래머, 특히 컴퓨터 과학에 대한 배경 지식이없는 사람들은 다음과 같이 재귀 적 정의의 수학 사이에 연관성이 없다는 것입니다.

F0=F1=1Fn=Fn1+Fn2F_0 = F_1 = 1\\
F_n = F_{n-1} + F_{n-2}

와 같은 재귀 함수 정의

데프 피브 (n)
  n == 0 인 경우 || n == 1
    1
  그밖에
    fib (n-1) + fib (n-2)
  종료
종료

Haskell과 같은 기능적 언어에서 더 명확합니다.

fib :: Nat-> Nat
fib 0 = 1
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

하스켈은 관계를보다 명확하게하기 위해 고안 되었기 때문입니다.

물론 프로그래밍 예제가 더 길면 관계를 파악하기는 어렵지만 기본적으로 존재합니다.

물론 이것은“하지만 프로그래밍은 수학입니다!”캠프에서 나옵니다.