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

时间:2019-04-08 15:15:56

标签: java recursion

目前正在尝试学习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));
}

1 个答案:

答案 0 :(得分:2)

通常,所有递归都分为两个主要见解:

  • 基本情况(或终止情况):最简单的问题是什么?您无需在哪里简化?

  • 递归案例:如何使用更简单的问题解决方案来解决当前问题?

这里的基本情况是字符串太短-少于两个字符的字符串显然不能包含“ hi”。

这里递归的情况是,以“ hi”开头的字符串比其余字符串多一个“ hi”,但是当您切掉开头时,其字符串不完全是“ hi”

代码对这两种见解进行了编码。