簡體   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