AAA Recursion_Count

Recursion_Count of aaa

提问人:user_program 提问时间:11/3/2023 更新时间:11/4/2023 访问量:58

问:

写一个递归函数,它计数,“aaa”的次数 出现在字符串中。打印返回的值。

输入: 啊啊

输出: 4

使用递归编写了以下代码,但“a”的值没有更新,编译器也找不到符号“count”。任何人都可以指出以下代码中的错误:

public static int retcount(String st,int s,int e){
        if(e>st.length()-1){
          return count;
        }
         int count=0;
        if(st.contains(st.substring(s,e))){
              count=count+1;
            retcount(st,s+1,e+1);
        }
         return count;
        }
Java 递归 子字符串

评论

0赞 WJS 11/3/2023
您需要声明 count like .你可能需要它来工作,比如 4。int count"aaxxaaaaakskskaakskskaaa"
0赞 user_program 11/3/2023
我确实将第 5 行中的计数初始化为 0,但它似乎没有得到更新。
0赞 WJS 11/3/2023
但是你在此之前引用了它。你为什么要通过,当你只需要找到一个三个字符的字符串时。字符串将始终包含其自身的子字符串。您需要检查当前子字符串是否等于“aaa”。startend
0赞 WJS 11/3/2023
顺便说一句,这是作业吗?
0赞 WJS 11/3/2023
参观并阅读如何提问

答:

1赞 WJS 11/3/2023 #1

以下是一些可能会有所帮助的想法。考虑起始字符串 。"abcdefgh"

  1. 如果我使用 substring(1) 调用该方法。我会得到"bcdefgh"

  2. 如果我再做一次,我会得到."cdefgh"

  3. 在某些时候,您希望能够查看传递的字符串是否以“aaa”开头。每次你只需要看看是否st.substring(0,3) equals "aaa"

  4. 如果是这样,我想增加计数并返回值。

  5. 否则,我不会增加计数并返回值。

  6. 由于调用正在展开,因此字符串将重新构建,一次一个字符。因此,从(3)开始重复上述过程。

在方法中使用 print 语句来帮助确定正在发生的情况。

最终,您可以传递字符串和 desired 作为参数。您可以使用 的 来调整子字符串匹配。target substringlengthtarget

评论

0赞 Sree Kumar 11/3/2023
很好的方法,除了我不能很好地理解第 (6) 点。(甲)甚么是「平仓」?(b) 如果我们只是开始一个循环,它将涵盖一切,不是吗?那为什么要重新开始呢?0(length of target) - (length of substring)3
1赞 WJS 11/3/2023
@SreeKumar 这是我和其他人用来描述从调用堆栈中获取值的返回过程的一个术语。当方法调用自身时,变量的当前状态存储在调用堆栈中。当您从这些调用返回时,这些调用的上一个状态将以相反的顺序返回。所以这就像解开已经缠绕的东西。下次我回答类似的问题时,我将跳过这个比喻。
0赞 Reilas 11/4/2023 #2

下面是一个示例。

int count(String a, String b, int x) {
    if (a.contains(b)) x = count(a.substring(1), b, ++x);
    return x;
}