이것은 StackOverflow에 대한 나의 첫 번째 질문이므로 프로토콜 위반 사례는 용서하십시오.왜 재귀 WebGL 함수는 스택 오버플로가 발생하지 않습니까?
저는 대학에서 컴퓨터 그래픽 수업을 통해 WebGL을 배우고 있습니다. 화면에 사각형 회전을 학습하는 동안, 내 친구들과 나는 렌더링 기능에 다음 코드를 발견 :
function render()
{
gl.clear(gl.COLOR_BUFFER_BIT);
theta += 0.1;
gl.uniform1f(thetaLoc, theta);
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
render();
}
우리가 이해하지 못하는, 우리의 교수는 우리에게 적절한 대답을 할 수 없었다 무엇 이 코드가 반복적으로 자신을 호출하기 때문에 스택 오버플로가 발생하지 않는 이유입니다. 우리는 코드를 실행했지만 아무런 문제가 발생하지는 않지만 이유는 알 수 없습니다.
Google 교과서 또는 온라인에서 답변을 찾을 수 없습니다. 누구든지 그것을 설명 할 수 있다면, 나는 그것을 반 친구들에게 전달할 것이다. 미리 감사드립니다.
http://stackoverflow.com/questions/310974/what-is-tail-call-optimization – JAre
필자는 Tail Call Optimization에 대해 들어 본 적이 없지만 제공 한 링크를 통해 완벽하게 설명했습니다. 나는 정보를 전달할 것이다. 감사! – Lochian
대부분의 컴파일러는 최적화 기회를 인식 할만큼 똑똑하지만 다른 하나는 오버플로가 될 수 있으므로주의하십시오. 반면에 함수형 언어는 재귀에 많이 의존하며 그 중 일부는 명확한 꼬리말 최적화를위한 수단을 제공하므로 재귀가 나쁜 것은 아니지만 위험 할 수 있습니다. – JAre