繁体   English   中英

为什么这种用于计数两个字符的递归Java方法有效?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM