c++ - Simple recursion question -


मान लें कि हमारे पास एक साधारण पुनरावृत्ति है।

  int x (int a) { यदि (a & lt; 10) x (a + 1); और! रोक! ख ++; वापसी ख; }  

ग्लोबैली:

  int b = 0;  

मुख्य में हमारे पास ऐसा कुछ हो सकता है:

  int p = x (1);  

क्या पुनरावर्ती को रोकने के लिए कोई तरीका है ताकि पी 0 हो, इसका मतलब यह है कि "b ++" को कभी भी निष्पादित नहीं किया जाएगा।

अगर आप मुझे इसके बजाय डाल करने के लिए कुछ प्रसार बता सकते हैं, तो मैं आभारी रहूंगा! STOP!

लेकिन, मैं इस तरह कुछ नहीं चाहता, मैं बस recursion को बंद करना चाहते हैं, ब्रेक की तरह; थोड़ी देर () लूप में होता है ...:

  int ok = 0; Int x (int a) {यदि (a & lt; 10) x (a + 1); और ठीक = 1; अगर (ठीक == 0) बी ++; वापसी ख; }  

अगर प्रश्न के बारे में कुछ भी स्पष्ट नहीं है, तो बस पूछें।

< P> आप ऐसा क्यों नहीं करेंगे?

  int x (int a) {यदि (a & lt; 10) {x (a + 1); ख ++; } वापसी बी; }  

यह बात है, हालांकि, आप पुनरावर्ती रूटीन में एक वैश्विक को संशोधित कर रहे हैं, जो विशेष रूप से थ्रेसेफ और सुंदर मैला नहीं है। आप एक मूल्य लौट रहे हैं जो हमेशा शीर्ष स्तर कॉलर को छोड़कर अनदेखा कर दिया जाता है आप कुछ भी कर रहे हैं जो एक पाश में बेहतर किया जा रहा है (लेकिन मैं मानता हूं कि आपका वास्तविक मामला इस से बड़ा है, या आप एक छात्र हैं)।

आप वास्तव में "तोड़ नहीं सकते "पुनरावर्ती - लौटने के लिए अच्छी तरह से पर्याप्त खोलना Oldey-timey सी में आप setjmp / longjmp (और इसके सभी खतरों - दूसरे शब्दों में, DO NOT) का उपयोग कर सकते हैं, और सी ++ में आप कोशिश / पकड़ / थ्रो का उपयोग कर सकते हैं, जो स्टैक को भी खोल देगा।


Comments

Popular posts from this blog

google indexing -

wpf controls - Trigger on Image inside a Button WPF -

wpf - Converter stops filter working -