我始终在以下代码中得到返回值val 0 :(计数字符串“ str”中子字符串“ pattern”的出现-(不一定是连续的(即“ sue”在“ sueee”中出现3次))。分别将0,0分别设置为strIndex和patternIndex。通常情况下,该方法实现了更大的count方法,因此请忽略该名称。(循环-在此禁止)
private static int compareStrAndPatternChar(String str, String pattern,int strIndex, int patternIndex) {
if(strIndex==str.length()-pattern.length () +1 && patternIndex==0) { //exit condition - will return counter if not met (number of occurrences of substring)
//checks if remaining substring is equal (or longer) than remaining chars (of pattern)
//to be checked
if (!(strIndex == str.length () - pattern.length () + 1 + patternIndex)) {
//If patternIndex has reached end of pattern and chars are equal(between str and pattern) - hence substring is equal!!!
if (patternIndex == pattern.length () - 1) {
if (str.charAt (strIndex)== pattern.charAt (patternIndex))
return compareStrAndPatternChar (str, pattern, strIndex + 1, patternIndex)+1;
} else if (str.charAt (strIndex) == pattern.charAt ((patternIndex)))//If not end of pattern but chars are equal check next index of pattern(with following
//str index)
return compareStrAndPatternChar (str, pattern, strIndex + 1, patternIndex + 1);
return compareStrAndPatternChar (str, pattern, strIndex + 1, patternIndex); //Either way check next str Index.
}
return 0;
}
return 0;
}
tx
您有一个递归调用,但是对于最初调用方法count()
的方法,仅第一个调用的返回值很重要(与递归调用无关)。
您有两个可能的内部返回值:10(如果计数器为10)或1。
由于不满足条件(首次通话时),所以只有最后一次返回是可能的。
对于第一个(也是唯一一个)调用,您内部有一个递归调用无关紧要。递归将增加计数器值,但是您无论如何都不会使用返回值,因此在所有递归调用之后,程序执行将在递归调用之后继续。然后返回1。
[如果您第二次调用count()
方法,则会看到计数器值增加。不幸的是,您的情况会导致无休止的递归调用,从10开始,增加一次,然后增加直到10(永远不会发生),因此您会得到StackOverflowError
。