c - with - सी रिकर्सिव फ़ंक्शन सच नहीं लौटेगा



what is recursion in c explain with example (1)

मैंने आपके कोड पर सावधानी से नहीं देखा है, इसलिए इसमें अन्य बग भी हो सकते हैं, लेकिन ऐसा लगता है कि आप कॉलर को सभी तरह से स्टैक को पारित करने के लिए गहनतम रिकर्सिव कॉल से रिटर्न मान चाहते हैं। उस स्थिति में, आप return 3; निकाल देंगे return 3; और केवल रिकर्सिव कॉल के प्रत्येक मान को वापस लौटाएं जो आप कर रहे हैं:

int recurseSearch(int value, int values[], int min, int max) {

    if (value > values[max] || min > max) return 1;

    int midpoint = (max+min)/2;

    if (values[midpoint] > value)
        //search in left
        return recurseSearch(value, values, min, midpoint);

    else if (values[midpoint] < value)
        //search in right
        return recurseSearch(value, values, midpoint, max);

    else if (values[midpoint] == value)
        return 0;

    else 
        return 2;
}

जिस तरह से आपने मूल रूप से अपना कोड लिखा था, पुनरावर्ती कॉलों से आने वाले मूल्यों को पूरी तरह से अनदेखा किया गया था, और return 3; कथन को इसके बजाय निष्पादित किया जाएगा।

मेरे पास एक खोज फ़ंक्शन है, जो एक सरणी के द्विआधारी खोज को प्रदर्शित करने के लिए रिकर्सन को नियत करता है, values[] , value :

int recurseSearch(int value, int values[], int min, int max) {

    if (value > values[max] || min > max) return 1;

    int midpoint = (max+min)/2;

    if (values[midpoint] > value)
        //search in left
        recurseSearch(value, values, min, midpoint);

    else if (values[midpoint] < value)
        //search in right
        recurseSearch(value, values, midpoint, max);

    else if (values[midpoint] == value)
        return 0;

    else 
        return 2;

    return 3;
}

कॉल करने वाला कोड केवल recurseSearch(value, values, 0, n); कॉल recurseSearch(value, values, 0, n);
पुष्टि करने के लिए, मैं values[5] बराबर {3, 11, 32, 54, 66} , value 3 होना चाहिए (यानी यह 0 पर वापस आना चाहिए), और इसलिए n 5 होना चाहिए।

तो यह कहा जाता है: recurseSearch(3, values, 0, 5);

अब मैं उम्मीद करता हूं कि यह अंततः वापस आ जाए, और प्रिंट, 0 , क्योंकि 3 वास्तव में सरणी में है। डीबगिंग पर सब कुछ अच्छी तरह से चल रहा है जब तक कि midpoint 0 हो, और इसलिए values[midpoint] == value सही है, और इसलिए return 0 लाइन चलनी चाहिए। हालांकि, इसके बजाय क्या होता है कि यह करता है, लेकिन फिर comtrol समारोह के अंत (समापन } ) के लिए कदम उठाता है, लेकिन फिर वापस ऊपर ले जाता है और return 3; चलाता है return 3; ऑन लाइन (यहां) 21

मुझे समझ में नहीं आ रहा है कि return 0 स्टेटमेंट फ़ंक्शन से return 3 क्यों नहीं return 3 और क्यों return 3 बिल्कुल नहीं चल रहा है

एनबी इस समस्या का return 3; निकालकर हल किया जाता है return 3; रेखा, हालांकि इस कारण शिकायत की शिकायत होती है, और चलने ( make ) के लिए जो आदेश मैं उपयोग कर रहा हूं, मौत के तौर पर फिट बैठता है, जिसे मैं बहुत अधिक से बचाना चाहूंगा





return