尾递归总是可以展开到循环中,并且您的代码 非常接近 尾递归,所以可以。
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; } }}请注意,可以进一步优化此代码,我只是想演示将递归转换为循环的“自动”方法。



