小编典典
尾递归总是可以展开到循环中,并且您的代码 非常接近 尾递归,所以可以。
private static boolean recur(String word, int length) {
if(length == 1 || length == 2)
return false;
if(length == 0)
return true;
int nextLength;
String nextWord;
if(words[length].contains(word.substring(0, length))) {
nextWord = word.substring(length);
nextLength = word.length() - length;
} else {
nextWord = word;
nextLength = length - 1;
}
return recur(nextWord, nextLength);
}
现在这是正确的尾递归。现在将其变成循环:
private static boolean recur(String word, int length) {
int nextLength = length;
String nextWord = word;
while( true ) {
if(nextLength == 1 || nextLength == 2)
return false;
if(nextLength == 0)
return true;
if(words[nextLength].contains(nextWord.substring(0, nextLength))) {
nextWord = nextWord.substring(nextLength);
nextLength = nextWord.length() - nextLength;
} else {
nextWord = nextWord;
nextLength = nextLength - 1;
}
}
}
请注意,可以进一步优化此代码,我只是想演示将递归转换为循环的“自动”方法。
2020-10-16