【发布时间】:2013-02-25 09:07:04
【问题描述】:
我正在尝试使用递归方法计算字母“e”出现在给定字符串中的实例数。我的测试字符串是Count my e's please!。到目前为止的代码如下:
public static int showE(String s, int count, int index)
{
if (index == -1) return count;
String e = "e";
int i = s.indexOf(e, index);
if (i != -1) count ++;
return showE(s, count, i);
}
当我调试代码时,int i 将保持在 9,而不是在每次调用中增加。
我认为由于最后一行代码使用int i 作为输入,它会在每次调用测试字符串时将方法签名中的int index 设置为9、15 和18。一旦不再检测到字母 e,我认为 int i 会将 -1 发送到签名,然后 int count 将返回给 main 方法。但是,调试表明 int i 将通过每次调用设置为 9,从而导致 StackOverflowError。如何解决这个问题?
编辑:这是响应 Stephen C 的代码。对格式表示抱歉:
public static int showE(int count, int index)
{
String e = "e";
index = s.indexOf(e, 0)
for(int i = index; i = < s.length() - 1; i++)
{
if (index == e) count++;
}
return count;
}
【问题讨论】:
-
问题几乎总是与停止条件有关。
-
你为什么要使用递归方法呢?
-
@Rob:我认为 OP 正在尝试递归,因为循环会更容易理解。
-
@Rob,我选择目前感觉自然的方式。它通常是循环,但我今天一直在递归。