我遇到了一个可怕的stackoverflowerror,并认为这是我的深层递归导致的(嗯,调试器对此起到了帮助……)。谁能指导我将递归转换为循环?
H<V>.Pair currPair = (H<V>.Pair) arr[startPos];
if (arr[startPos] == null) {
return null;
}
if (currPair.key.equals(key)) {
return currPair.value;
} else {
return find(gNL(startPos, ++stepNum, key), key, stepNum);
}
}
更具体地说,return find(getNextLocation(startPos, ++stepNum, key), key, stepNum);
导致递归。
这似乎是等效的:
private V find(int startPos, String key, int stepNum) {
Hashtable<V>.Pair p;
boolean finished = false;
do {
p = (Hashtable<V>.Pair) arr[startPos];
if (p == null || p.key.equals(key)) {
finished = true;
} else {
startPos = getNextLocation(startPos, ++stepNum, key);
}
} while( ! finished);
return p == null ? null : p.value;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句