提问人:user_program 提问时间:11/3/2023 更新时间:11/4/2023 访问量:58
AAA Recursion_Count
Recursion_Count of aaa
问:
写一个递归函数,它计数,“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;
}
答:
1赞
WJS
11/3/2023
#1
以下是一些可能会有所帮助的想法。考虑起始字符串 。"abcdefgh"
如果我使用 substring(1) 调用该方法。我会得到
"bcdefgh"
如果我再做一次,我会得到.
"cdefgh"
在某些时候,您希望能够查看传递的字符串是否以“aaa”开头。每次你只需要看看是否
st.substring(0,3) equals "aaa"
如果是这样,我想增加计数并返回值。
否则,我不会增加计数并返回值。
由于调用正在展开,因此字符串将重新构建,一次一个字符。因此,从(3)开始重复上述过程。
在方法中使用 print 语句来帮助确定正在发生的情况。
最终,您可以传递字符串和 desired 作为参数。您可以使用 的 来调整子字符串匹配。target substring
length
target
评论
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;
}
评论
int count
"aaxxaaaaakskskaakskskaaa"
start
end