目前正在尝试学习Java。我只是在解决一些递归问题,然后遇到了一个问题,要求我计算另一个字符串中子字符串“ hi”的出现次数。我一直在寻找执行此操作的递归方法,但我发现一个代码基本上可以实现我想要的并且可以解释,但是我不了解它的工作方式/原因。我对其他递归问题没有任何疑问,而且我了解在其主体内调用函数的概念,但是这段代码的工作方式使我感到困惑。在调试器中逐步执行它只会让我感到困惑。
public int countHi(String str) {
int n = str.length();
if(n <= 1) return 0;
if(str.substring(0, 2).equals("hi"))
return countHi(str.substring(1)) + 1;
return countHi(str.substring(1));
}
答案 0 :(得分:2)
通常,所有递归都分为两个主要见解:
基本情况(或终止情况):最简单的问题是什么?您无需在哪里简化?
递归案例:如何使用更简单的问题解决方案来解决当前问题?
这里的基本情况是字符串太短-少于两个字符的字符串显然不能包含“ hi”。
这里递归的情况是,以“ hi”开头的字符串比其余字符串多一个“ hi”,但是当您切掉开头时,其字符串不完全是“ hi”
代码对这两种见解进行了编码。