जावा में पुनरावृत्ति को चालू करना?
मेरे द्वारा एक अनंत लूप बनाने की वजह से मुझे एक स्टैक ओवरफ्लो त्रुटि मिलती है । विधि को पुनरावृत्ति में बदलना इसे रोक देगा, लेकिन मुझे नहीं पता कि कैसे!
क्या कोई मेरी पुनरावृत्ति को पाश में बदलने में मेरा मार्गदर्शन कर सकता है?
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);
से त्रुटि का कारण बनता है!
जवाब
आपकी पुनरावर्ती कॉल पूंछ की स्थिति में है। इस प्रकार यह पहले से ही एक लूप का वर्णन करता है। बस इसे स्पष्ट करने की जरूरत है, वाक्यात्मक रूप से:
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;
}
}
मैं जावा में कोड नहीं करता। यदि उपरोक्त कोड किसी भी तरह से गैर-अनुपालन योग्य है, तो कृपया इसे छद्म कोड के रूप में मानें और कुछ उपयुक्त में बदलें।
अगर पूरा 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);
}