2010-05-06 14 views
7

एक पुनरावर्ती विधि में आधार या रोक मामले के बारे में एक सैद्धांतिक प्रश्न, इसके मानकों क्या हैं?एक रिकर्सिव विधि में बेस केस

मेरा मतलब है, क्या यह सामान्य है कि इसमें शरीर न हो, केवल वापसी कथन?

if (input operation value) 
    return sth; 

आप इसके बारे में अलग अलग विचार है:

निम्नलिखित की तरह हमेशा यह है?

उत्तर

1

आधार मामला लूप को समाप्त करना है (एक अनंत रिकर्सन बनने से बचें)। बेस केस में कोई मानक नहीं है, किसी भी इनपुट को हल करने के लिए पर्याप्त सरल है जिसे बिल्कुल एक के रूप में चुना जा सकता है।

f(value) 
    if (test value) 
     return value 
    else 
     return f(simplify value) 

मुझे नहीं लगता कि आप अधिक से अधिक कह सकते है:

int factorial (int n) { 
    if (n <= 5) { 
    // Not just a return statement 
    int x = 1; 
    while (n > 0) { 
     x *= n; 
     -- n; 
    } 
    return x; 
    } else { 
    return n * factorial(n-1); 
    } 
} 
+1

मैंने कहा कि मैं सैद्धांतिक प्रश्न पूछ रहा हूं, मेरा मतलब है कि अगर मैं रिकर्सन पढ़ाना चाहता हूं, तो मैं आपके पिछले कोड का उपयोग नहीं करता, मुझे पता है कि यह एक वैध तरीका है, लेकिन यह रिकर्सन और बेस केस अवधारणा को स्पष्ट नहीं करता है पर्याप्त, आपको क्या लगता है? – Lisa

7

पुनरावर्ती कार्यों के लिए पैटर्न है कि वे कुछ इस तरह दिखाई है:

उदाहरण के लिए, इस पूरी तरह से वैध है सामान्य मामलों के बारे में।

+1

कौन सी प्रोग्रामिंग भाषा है? – Solace

+4

@ सोलेस जो एक छद्म कोड की तरह दिखता है, कोई विशेष प्रोग्रामिंग भाषा नहीं – Deep

0

यह पूरी तरह से विशेष रिकर्सिव फ़ंक्शन पर निर्भर करता है। आम तौर पर, यह खाली return; कथन नहीं हो सकता है, हालांकि - किसी भी रिकर्सिव फ़ंक्शन के लिए जो कोई मान देता है, बेस केस को उस प्रकार का मान भी वापस करना चाहिए, क्योंकि func(base) भी एक पूरी तरह से वैध कॉल है। उदाहरण के लिए, एक रिकर्सिव factorial फ़ंक्शन आधार मान के रूप में 1 वापस करेगा।

+0

एक पुनरावर्ती विधि को मूल्य वापस करने की आवश्यकता नहीं है, हालांकि। – Ken

+0

सच है, ज़ाहिर है। लेकिन फिर, मैं कह सकता था: रिकॉर्डेव विधियों के लिए जो 'शून्य' वापस लौटाते हैं, आधार भी 'शून्य' वापस कर देगा ...;) – tzaman

1

कुछ मामलों में, अपने आधार मामले

return literal 

कुछ मामलों में है, अपने आधार मामला बस "वापसी एक शाब्दिक" नहीं है।

कोई "मानक" नहीं हो सकता - यह आपके कार्य पर निर्भर करता है।

उदाहरण के लिए "सिराक्यूज़ फ़ंक्शन" http://en.wikipedia.org/wiki/Collatz_conjecture, में मामूली आधार मामला या मामूली शाब्दिक मूल्य नहीं है।

"क्या आपके पास इसके बारे में अलग-अलग विचार हैं ??" वास्तव में एक समझदार सवाल नहीं है।

रिकर्सन को समाप्त करना है, बस इतना ही है। एक छोटी पूंछ की पुनरावृत्ति में "बेस केस" हो सकता है जो एक शाब्दिक लौटाता है, या यह गणना हो सकती है। एक और जटिल रिकर्सन में मामूली "बेस केस" नहीं हो सकता है।

+0

इस उत्तर पर आगे बढ़ने की कोशिश कर रहे हैं, रिकर्सिव फ़ंक्शन में एक बेस केस कुछ भी हो सकता है जिसका जिसका कुछ भी हो सकता है 'ओ (एन)' वास्तविक कार्य के 'ओ (एन)' से काफी कम है। इसलिए एक सरल (कम जटिल) ऑपरेशन लौट रहा है। – Deep

संबंधित मुद्दे