2013-10-08 65 views
0

獲得偶數的總和在陣列我想獲得偶數的總和的數組:嘗試使用遞歸

public static void main(String[] args) { 
    int[] array = new int[4]; 
    array[0] = 1; 
    array[1] = 2; 
    array[2] = 2; 
    array[3] = 4; 

    System.out.println("Count even: " + countE(array, 0));  
} 

public static int countE(int[] arr, int head) { 
     if (arr.length == head) { 
     return -1; 
     } else if (arr[head] % 2 == 0) {    

      return 1 + countE(arr, head + 1); 
    } else { 

     return 0 + countE(arr, head + 1); 
    } 
} 
+1

這很好,那麼? –

+0

輸出應該給我偶數的計數,在我的主要方法中,我有一個長度爲4的數組,並且有3個偶數..它給我的計數爲2 – Scarl

+0

爲什麼使用遞歸來解決線性問題?遞歸在這裏是錯誤的方法。 –

回答

0
if (arr.length == head) { 
     return -1; 

是給你的問題的兄弟......你減去1從最終的個性化......嘗試做

if (arr.length == head) { 
     return 0; 
+0

我發現問題是在最後的elose statment ..基本上我應該返回「arr [0] + countE(arr,head + 1) – Scarl

+0

我以爲你在計算偶數的數量......對不起..我的不好的... – TheLostMind

+0

@ user2851858用不同的輸入再試一次;像2作爲第一個元素,其他的都是1. –

0

它可以通過遞歸來完成,要添加的數字錯誤

 else if (arr[head]%2==0) 
     { 
      return arr[head] + countHead(arr, head + 1); 
     } 
+0

這應該能解決你的問題 –

0

它給你2,因爲在上一次遞歸時,它會扣除1 - 你的基本情況是錯誤的。反而返回0。

0

我希望我不會爲你透露太多,它帶走了學習的興奮!

public static int countE(int[] array, int index) { 
    int currentNumber = array[index]; 
    if(index == array.length) { 
    // terminate it by returning a value that does not affect the sum (what integer is this?) 
    } else { 
    // check if even, if even, add the current number, else, add zero (both are recursive calls) 
    if(isEven(currentNumber)) { 
     return // your recursive call if even, currentNumber should be added 
    } else { 
     return // your recursive call if not, currentNumber should not be added 
    } 
    } 
} 

public static boolean isEven(int number) { 
    return (number % 2 == 0) ? true : false; 
} 
0

Hlo。好友..試試這個

package com.smk.recursion; 

public class SumOfEvenNoFromArray { 
public static void main(String[] args) { 

    int[] a = new int[5]; 
    a[0] = 2; 
    a[1] = 5; 
    a[2] = 4; 
    a[3] = 4; 
    a[4] = 4; 

    System.out.println("Sum of Odd Numbers : "+sumEvenNoRecursion(a,(a.length-1))); 

} 

public static int sumEvenNoRecursion(int[] arr, int index){ 
    int sum; 
    if(index == -1){ 
     return 0; 
    }else if(arr[index]%2 == 0){   
     sum = arr[index] + sumEvenNoRecursion(arr, --index);    
    }else{ 
     sum = sumEvenNoRecursion(arr, --index);    
    } 
    return sum; 


} 
} 

//輸出

總和奇數:14

+0

我的代碼有什麼問題? –

0

你可以使用一個輔助功能,爲您的遞歸。

public static int sumofEvens(int[] list){ 
    int sum = sumHelper(list, 0, 0); 
    return sum; 
} 
private static int sumHelper(int[] list, int i, int sum){ 
    if(i < list.length){ 
     if(list[i] % 2 == 0){ 
      sum += list[i]; 
     } 
     sum = sumHelper(list, i+1, sum); 
    } 
    return sum; 
}