अन्य उत्तरदाता सही हैं कि कुछ कंपाइलर जादू है जो पूंछ रिकर्सन को पुनरावृत्ति में परिवर्तित करता है, हालांकि यह संकलक की अनुकूलन सेटिंग्स पर निर्भर करता है। उदाहरण के लिए जीसीसी में, हम gcc -S -O1 someFile.c
(अपने कोड दिया गया है) के साथ संकलन करता है, तो, हम निम्नलिखित उत्पन्न विधानसभा मिलती है:, यह अभी भी कॉल उपयोग कर रहा है/छोड़/सेवानिवृत्त निर्देश एक वास्तविक समारोह कॉल प्रदर्शन करने के लिए
fun:
.LFB2:
pushq %rbp
.LCFI0:
movq %rsp, %rbp
.LCFI1:
movl $0, %eax
call fun
leave
ret
.LFE2:
.size fun, .-fun
तो आप देख सकते , जो प्रक्रिया को मार डालेगा। एक बार जब आप gcc -S -O2 someFile.c
के साथ आगे अनुकूलन प्रारंभ हम जादू हो रही शुरू:
fun:
.LFB24:
.p2align 4,,10
.p2align 3
.L2:
jmp .L2
.LFE24:
.size fun, .-fun
.p2align 4,,15
यह अपने संकलक और अपने संकलक सेटिंग्स पर निर्भर करता है, इसलिए यह मित्र उनके साथ रहना मदद करता है।
स्रोत
2010-02-18 19:10:45
इस प्रश्न से पूछने के लिए बेहतर जगह :) –