2016-09-20 4 views
-1

배열의 문자 수를 계산하기 위해이 코드를 Java로 작성했습니다. 그러나 재귀를 사용하지 않았습니다. 누군가 재귀 적으로 이것을 재 작성할 수 있습니까? for loopcount++으로 변환하려면 어떻게해야합니까? 대신에, 반복해서이 코드를 재귀로 작성하려면 어떻게해야합니까?

public int count(char[] arr, char ch) { 
    if (arr == null) { 
     return -1; 
    } 
    int count = 0; 
    for (int i = 0; i < arr.length; i++) {   
     if (arr[i] == ch) { 
      count++; 
     } 
    } 
    return count; 
} 
+5

@kkaosninja, 그는 지금까지 내가 그것을 가지고 같이 재귀로이 다시 우리를 원한다. – SomeJavaGuy

+0

StackOverflow에 오신 것을 환영합니다. 도움말 설명서의 게시 지침을 읽고 따르십시오. [최소한의 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)가 여기에 적용됩니다. 시도를 게시하고 문제를 정확하게 설명하기 전까지는 효과적으로 도움을 드릴 수 없습니다. StackOverflow는 코딩 또는 튜토리얼 서비스가 아닙니다. 나는 재귀로서 이것을 쓰려고 시도하지 않았다. – Prune

답변

2

은 (따라서는 어레이에있는 현재 위치 인 제 3 파라미터가 필요) 루프가, 재귀는 쓰기 기능이 자신을 호출한다 물마루.

인덱스 0에서 시작하여 현재 char가 char가 아닌 경우 0을 반환하고, char가 아닌 경우 0을 반환합니다. 그런 다음 나머지 배열에 대해서도 동일한 작업을 수행해야합니다. 끝 (currIndex == arr.length)에 도달하면 합계의 시작 값으로 0을 반환합니다. 그는 현재 일어나고있는 재귀에 대해 물어 밤은

public static void main (final String[] args) { 
    char[] foo = {'f', 'o', 'o', 'b', 'a', 'r'}; 
    System.out.println (count (foo, 'o')); // 2 
    System.out.println (countRecursive (foo, 'o')); // 2 
    } 

    public static int countRecursive (final char[] arr, 
            final char ch) { 
    return countRecursive (arr, ch, 0); 
    } 

    public static int countRecursive (final char[] arr, 
            final char ch, 
            final int currIndex) { 
    if (currIndex == arr.length) { 
     return 0; 
    } else { 
     return (arr[currIndex] == ch ? 1 : 0) + countRecursive (arr, ch, currIndex + 1); 
    } 
    } 
0
public int count(char[] arr, char ch) { 
    if (arr == null || arr.length ==0) { 
     return 0; 
    } 
    char[] oneSmallerArr = new char[arr.length-1]; 
    System.arraycopy(arr, 1, oneSmallerArr, 0, oneSmallerArr.length); 
    return (arr[0] == ch ? 1 : 0) + count(oneSmallerArr, ch); 
} 
+1

그런 작업에 복잡도 O (n^2)의 알고리즘을 제안 하시겠습니까? – Max

+1

비효율적 일 수 있지만 FP 언어로 된 모양을가집니다. 배열 대신 문자의 cons-list가 있습니다. –

관련 문제