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