우선이 것은 숙제가 아닙니다. 그냥 연습하고있어. 주어진 문자열에 "hi"가 나타나는 횟수를 재귀 적으로 결정하려고 시도하지만 모든 경우에 마지막 else if 문과 문자열이 비어있는 항목으로 건너 뜁니다. 어떤 아이디어?자바 재귀 횟수
기본적으로, 는 "안녕하세요"그냥 계산 1 증가 수 (문자열이 "안녕하세요"로 시작)와 스킵 2 인덱스 이후의 문자열로 재귀 경우 다른
(문자열하지 않는 경우 "hi"로 시작하고 문자열이 비어 있지 않음) 다음 번에 "hi"로 시작하는지 알아보기 위해 첫 번째 인덱스 다음에 문자열을 재귀 적으로 사용하십시오.
else if (문자열이 비어있는 경우) 인쇄 ("텍스트의 끝에 도달 함") return count;
public class Practice {
public int recur(String str, int counter){
int count=counter;
if(str.startsWith("hi")){
count++;
recur(str.substring(2),count);
}
else if((!str.isEmpty())&&(!str.startsWith("hi"))){
recur(str.substring(1),count);
}
else if(str.isEmpty()){
System.out.println("End of text reached");
return count;
}
return count;
}
public static void main(String args[]){
String str="xxhixhixx";
Practice p=new Practice();
System.out.println(p.recur(str, 0));
}
}
문자열 처리 [wiki] (http://en.wikipedia.org/wiki/Recursion_%28computer_science%29#Recursive_procedures)보다 재귀 연습에서 시작하는 것이 더 좋은 예가 있습니다. – PeterMmm
나는 이것에 문제가있다.'counter '가 외부 호출의 일부이기 때문에 호출자가 결과를 수정할 수있다. 최소한 이것은'private'으로 만들어 져야합니다.'public' 래퍼는'counter'를 포함하지 않습니다. (재귀 적이 아닙니다.) 다른 방법은 재귀 복귀 중에 추가 작업을 수행하는 것입니다.또한, 당신은'startsWith'로 확인한 다음, 커서를 1 씩 옮긴다.'indexOf'의 문제점 (더 나은 최적화가 가능하다.) –