[英]Why does this recursive Java method for counting two characters work?
目前正在尝试学习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));
}
通常,所有递归都分解为两个主要见解:
基本案例(或终止案例):最简单的问题是什么? 您无需在哪里简化?
递归案例:如何使用较简单的问题解决方案来解决当前问题?
这里的基本情况是字符串太短-少于两个字符的字符串显然不能包含“ hi”。
这里的递归情况是,以“ hi”开头的字符串比其余字符串多一个“ hi”,但是当您切掉开头时,该字符串没有那么多的“ hi”。
该代码对这两种见解进行了编码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.