मुझे इस बारे में अनिश्चितता है कि रिकर्सन के दौरान मेमोरी में चर कैसे बनाए जाते हैं और संग्रहीत किए जाते हैं। नीचे एक उदाहरण सी प्राइमर प्लस से लिया है:पुनरावृत्ति में स्मृति में चर कैसे संग्रहीत किए जाते हैं?
#include <stdio.h>
void recursiontest(int);
int main(){
recursiontest(3);
return 0;
}
void recursiontest(int n){
printf("Level %d : %#x\n", n, &n);
if(n < 4)
recursiontest(n + 1);
printf("LEVEL %d : %#x\n", n, &n);
return;
}
कौन सा उत्पादन पैदावार:
स्तर 3: 0x3ce1f8bc
स्तर 4: 0x3ce1f89c
स्तर 4: 0x3ce1f89c
स्तर 3: 0x3ce1f8bc
ऐसा प्रतीत होता है कि मूल फ़ंक्शन कॉल में "n" परिवर्तनीय स्थानीय पहले (और केवल) रिकर्सिव कॉल की तुलना में क्रमशः एक पते का पता है। ऐसा क्यों है?
जब मैं कोई फ़ंक्शन कॉल करता हूं, तो इसके औपचारिक पैरामीटर घोषित किए गए वास्तविक तर्क के संदर्भ में घोषित और परिभाषित नहीं होते हैं? इसका मतलब यह नहीं होगा कि पहले कॉल के लिए पूर्णांक एन स्थानीय दूसरे (रिकर्सिव) कॉल से पहले बनाया गया है? दूसरी कॉल के एन को पहले कॉल से पहले पता कैसे हो सकता है?
वास्तव में एक अंतर देखने के लिए * * * कम एन मान (जैसे, -99) का उपयोग करें। – Makoto