java辅助中的递归方法

问题描述 投票:0回答:1

我始终在以下代码中得到返回值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
java variables static
1个回答
0
投票

您有一个递归调用,但是对于最初调用方法count()的方法,仅第一个调用的返回值很重要(与递归调用无关)。

您有两个可能的内部返回值:10(如果计数器为10)或1。

由于不满足条件(首次通话时),所以只有最后一次返回是可能的。

对于第一个(也是唯一一个)调用,您内部有一个递归调用无关紧要。递归将增加计数器值,但是您无论如何都不会使用返回值,因此在所有递归调用之后,程序执行将在递归调用之后继续。然后返回1。

[如果您第二次调用count()方法,则会看到计数器值增加。不幸的是,您的情况会导致无休止的递归调用,从10开始,增加一次,然后增加直到10(永远不会发生),因此您会得到StackOverflowError

© www.soinside.com 2019 - 2024. All rights reserved.