2016-09-20 8 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

再帰を使用すると、書き込み機能は、(それゆえ、あなたがアレイ内に持っている現在の位置である第三のパラメータは、必要)自体を呼び出す必要があり、ループの谷。

インデックス0から始まり、現在のcharがcharでない場合は0、そうでない場合は1が返されます。次に、配列の残りの部分についても同じ操作を行う必要があります。最後(currIndex == arr.length)に達すると、合計の開始値として0が返されます。彼は、現在起こって再帰について尋ねisn't

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言語の形をしています。配列の代わりにcharのコンスリストがあります。 –

関連する問題