Java 递归方法中的StackOverflower错误
我尝试使用递归方法计算字母“e”在给定字符串中出现的实例数。我的测试字符串是Java 递归方法中的StackOverflower错误,java,string,recursion,Java,String,Recursion,我尝试使用递归方法计算字母“e”在给定字符串中出现的实例数。我的测试字符串是请数一数我的e。以下是迄今为止的代码: 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 ++;
请数一数我的e代码>。以下是迄今为止的代码:
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);
}
当我调试代码时,inti
将保持在9,而不是通过每次调用增加
我认为,由于最后一行代码使用inti
作为输入,它将通过对测试字符串的每次调用,将方法签名中的intindex
设置为9、15和18。一旦不再检测到字母e,我认为int I
将向签名发送-1,然后int count
将返回到main方法。然而,调试表明,inti
将通过每次调用设置为9,从而导致StackOverflower错误。如何解决这个问题
编辑:这是回应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;
}
公共静态整数显示(整数计数、整数索引)
{
字符串e=“e”;
索引=s.indexOf(e,0)
for(inti=index;i=
从您提供的索引开始搜索。它从索引9开始搜索,在那里找到一个“e”,然后返回9
尝试在索引+1处启动indexOf
两点:
- 对于这个问题,有一个更优雅的递归解决方案,它只需要showE
方法中的两个参数提示:考虑在递归调用的结果中添加一些内容
问题几乎总是出在停止条件上。为什么要使用递归方法来解决这个问题?@Rob:我想OP是在尝试递归,因为循环更容易理解。@Rob,我现在用的是感觉自然的方法。它通常是循环,但我今天一直在进行递归踢击。+1,但现在结果将是e的数目+1(对于
abcde
它将返回2而不是1)。所以现在返回应该是returncount-1
@marounnaroun不,count
本身没有改变,只是搜索的起始索引。事实上,我最初是用index+1
编写程序的。我想我在混乱中解开了它,试图修复另一个错误。赞美你的同时也踢我自己。非常感谢。你是对的,我错了。在此修复之前我更改了代码:)以“e”开头的字符串仍然存在问题。最初必须使用小于-1的索引调用例程。因此,使用-2调用是可行的,但是-1或0将不起作用。这就是我在可能的情况下尽量远离递归的具体原因,但正如我前面所说的,我最近一直在使用这种该死的递归方法。我将尝试这2个论点的挑战。如果你再见到我,我已经成功了。我想我已经找到了一个方法,只需要两个参数就可以完成这个调用。我实际上正在研究第三种解决方案,以避免递归。请看一看和2参数,递归解决方案。请参见问题的编辑以获取答案。