2016-09-20 56 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语言中的形状。将会有一个字符串而不是数组。 –