2016-09-20 58 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他isn't詢問當前發生的遞歸,他要我們只要我得到它改寫成遞歸這一點。 – SomeJavaGuy

+0

歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)適用於此處。在您發佈您的嘗試並準確描述問題之前,我們無法有效幫助您。 StackOverflow不是一個編碼或教程服務。我沒有看到在這裏寫這個遞歸。 – Prune

回答

2

代替迭代的槽循環,遞歸你寫的函數調用自身(因此需要一個第三參數,這是你在陣列中具有的當前位置)。

您只需從索引0開始,如果當前字符不是char,則返回0,如果是,則返回1。然後,您必須對數組的其餘部分執行相同的操作。當到達結尾(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語言中的形狀。將會有一個字符串而不是數組。 –