如何将此代码编写为递归?

时间:2016-09-20 08:22:25

标签: java recursion

我用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;  
}

2 个答案:

答案 0 :(得分:2)

不是通过循环迭代,而是为了递归,你编写的函数必须自己调用(因此你需要第三个参数,这是你在数组中的当前位置)。

你只需从索引0开始,如果当前字符不是你的字符则返回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);
    }
  }

答案 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);
}