평범 할 것입니다.이 질문과 관련하여 Ackermann very inefficient with Haskell/GHC (필자는 아마도 비합리적으로 나를 짜증나게합니다) 왜 Wilhelm Ackermann의 유명한 기능을 계산할 프로그램이Ackermann의 기능은 gcc에서 segfaults
인지 궁금합니다.int ack(int m, int n) {
if (m == 0) return n+1;
if (n == 0) return ack(m-1, 1);
return ack(m-1, ack(m, n-1));
}
int main() {
printf("%d\n", ack(4,1));
return 0;
}
는 잘 작동하지만 (다른 곳에서 도움) 명백한 최적화를 주어진 인수 (4,2) 주어 졌을 때 - 물론 알고리즘 잔인 - Segmentation fault: 11
로 끝나는 :
int ack(int m, int n) {
if (m == 0) return n+1;
if (m == 1) return n+2;
if (n == 0) return ack(m-1, 1);
return ack(m-1, ack(m, n-1));
}
int main() {
printf("%d\n", ack(4,2));
return 0;
}
만약 내가 com 최적화 프로그램 'if (m == 1) return n+2;
'을 실행하면 프로그램은 다른 언어에서와 마찬가지로 계속 실행되지만 동일한 효과는 없습니다. 적어도 5 분의 동작 후에는 그렇지 않습니다. (내가 OS X에서 함께 제공 gcc를 사용하고 있음을 유의하지만, 같은 예와 gcc-4.7.2
ideone.com
에 일어나고있는 것 같다.)
나는 프로그램을 동의 - [8m41s 후 보정, 않는 것 같습니다] 컴파일 할 자격도 없지만 일반적으로 공포와 언어 흠집이나 컴파일러 오류로 내가 낯 익은 다른 언어로 볼 수있는 세분화 오류가 gcc
에 대한 적절한 응답인지 궁금합니다.
애커 만 (Ackerman 's)이이를 수행해야합니다. –
핫 릭스 (Hot Licks)는 내 생각을 다룬다. 그러나 다른 사람들은 다르게 생각하는 것 같다. 특정 컴파일러 응답 만이 합리적이라고 규정하고있다. – applicative