जावा में पुनरावृत्ति को चालू करना?

Nov 29 2020

मेरे द्वारा एक अनंत लूप बनाने की वजह से मुझे एक स्टैक ओवरफ्लो त्रुटि मिलती है । विधि को पुनरावृत्ति में बदलना इसे रोक देगा, लेकिन मुझे नहीं पता कि कैसे!

क्या कोई मेरी पुनरावृत्ति को पाश में बदलने में मेरा मार्गदर्शन कर सकता है?

private int findEmpty(int startPos, int stepNum, String key) {
    if (arr[startPos] == null) {
        return startPos;
    }
    return findEmpty(getNextLocation(startPos, ++stepNum, key), stepNum, key);
}

यह विशेष रूप return findEmpty(getNextLocation(startPos, ++stepNum, key), stepNum, key);से त्रुटि का कारण बनता है!

जवाब

3 WillNess Nov 29 2020 at 23:09

आपकी पुनरावर्ती कॉल पूंछ की स्थिति में है। इस प्रकार यह पहले से ही एक लूप का वर्णन करता है। बस इसे स्पष्ट करने की जरूरत है, वाक्यात्मक रूप से:

private int findEmpty(int startPos, int stepNum, String key) {
  while( True ) 
  {
    if (arr[startPos] == null) {
        return startPos;
    }
    // return findEmpty(getNextLocation(startPos, ++stepNum, key), stepNum, key);
    ++stepNum;
    int nextPos = getNextLocation(startPos, stepNum, key);
    // return findEmpty(nextPos, stepNum, key);
    startPos = nextPos;
  }
}

मैं जावा में कोड नहीं करता। यदि उपरोक्त कोड किसी भी तरह से गैर-अनुपालन योग्य है, तो कृपया इसे छद्म कोड के रूप में मानें और कुछ उपयुक्त में बदलें।

LiveandLetLive Nov 29 2020 at 23:14

अगर पूरा arr[startPos]नहीं nullहै तो आपका फंक्शन कभी नहीं लौटेगा । आपको कुछ इस तरह की शर्त रखनी होगी:

private int findEmpty(int startPos, int stepNum, String key) {
    if (startPos == arr.length) {
        return -1; // The value if no null element is found
    }
    if (arr[startPos] == null) {
        return startPos;
    }
    return findEmpty(getNextLocation(startPos, ++stepNum, key), stepNum, key);
}