मुझे रिकर्सन का प्रदर्शन करने के लिए एक नमूना कार्यक्रम दिखाया गया था जो ऐसा लगता है कि यह काम नहीं करना चाहिए बल्कि करता है। तर्क बहुत स्पष्ट है लेकिन यह तब भी क्यों काम करता है जब रिकर्स किए गए फ़ंक्शन कॉल को वापस नहीं किया जाता है? ऐसा लगता है कि return
स्टैक से कमांड ब्रेक आउट होने पर भी अनुरोध किया जाता है। क्या यह एक भाषा मानक या एक जीसीसी चीज है? मैंने इसे सी और सी ++ के साथ विंडोज और लिनक्स पर जीसीसी के साथ संकलित किया।एक रिक्त रिटर्न कथन बिना रिक्त रिटर्न कॉल स्टैक से क्यों टूट जाता है?
#include <iostream>
#include <cstdlib>
using namespace std;
int isprime(int num, int i)
{
if (i == 1) {
return 1;
}
else {
if (num % i == 0)
return 0;
else
isprime(num, i-1); // should be returned
}
}
int main(int argc, char** argv)
{
int input = atoi(argv[1]);
cout << input << "\t" << isprime(input, input/2) << "\n";
}
अपरिभाषित व्यवहार में दुर्घटना से काम करने वाले कोड शामिल हैं। फ़ंक्शन कॉल दाएं सीपीयू रजिस्टर में वापसी मान छोड़ देता है। –
मुझे प्रश्न को कम करने का कारण नहीं दिख रहा है। यह एक बहुत अच्छा संदेह है कि कई शुरुआती लोग हो सकते थे। – varevarao
@varevarao: शुरुआती "संदेह" अनुसंधान प्रयास से संतुष्ट हैं। उस ने कहा, मैं ऊपर उठाया। –