2014-08-29 69 views
-7
public long weightedSum(int[] a, int[] b, int n) { 
    long value = 0; 
    long sum = 0; 

    for (int i = 0; i < a.length; i++) { 
     value = a[i] * b[i]; 
     sum = sum + value; 

    } 

    return sum; 
} 

以两个一维整数数组和一个整数n作为参数,并返回两个数组中前n个元素的乘积之和。例如,给定以下两个一维数组:如何将代码改成递归Java?

int[] arr1 = {1, 2, 3, 4, 5}; 
int[] arr2 = {6, 7, 8, 9, 10}; 

第一4个ARR1和ARR2的元素,即,1 * 6 + 2 * 7 + 3 * 8 + 4 * 9 = 80作为结果。

+4

你到目前为止尝试过什么? – 2014-08-29 08:06:44

+2

你为什么想要? – 2014-08-29 08:08:35

+0

为第n对计算“值”,并将其与n-1递归结果相加。如果n == 0,则返回0。 (@ScaryWombat - 因为它是一个任务?) – 2014-08-29 08:09:00

回答

0
public static long weightedSum(int[] a, int[] b, int n) { 
    if (n == 0) 
     return 0; 
    else 
     return a[n - 1] * b[n - 1] + weightedSum(a, b, n - 1); 
} 

输出:

int[] arr1 = { 1, 2, 3, 4, 5 }; 
int[] arr2 = { 6, 7, 8, 9, 10 }; 

System.out.println(weightedSum(arr1, arr2, 1)); // output : 6 
System.out.println(weightedSum(arr1, arr2, 2)); // output : 20 
System.out.println(weightedSum(arr1, arr2, 3)); // output : 44 
System.out.println(weightedSum(arr1, arr2, 4)); // output : 80 
System.out.println(weightedSum(arr1, arr2, 5)); // output : 130 
+0

非常感谢你:)我真的非常感谢你 – 2014-08-29 08:40:04

+0

@BLACKFLAME欢迎你:) – sujithvm 2014-08-29 08:49:03

0

她是你的问题的一个示例解决方案:

public static long recusiveWeightedSum(int [] a ,int [] b, int index) 
    { 
     if (index == a.length) { 
      return 0; 
     } else { 
      return a[index] * b[index] + recusiveWeightedSum(a, b, index + 1); 
     } 
    } 

public static void main(String[] args) { 
     int[] arr1 = {1, 2, 3, 4, 5}; 
     int[] arr2 = {6, 7, 8, 9, 10}; 

     System.out.println("Sum1:" + Sample.weightedSum(arr1, arr2)); 
     System.out.println("Sum2:" + Sample.recusiveWeightedSum(arr1, arr2, 0)); 
    } 
+0

非常感谢你:)我真的很感谢 – 2014-08-29 08:39:34

0

继承人一个我已经做了,但你必须在0到通过正第一次你叫它。

public long sum(int[] a, int[] b, int n){ 


     while(a.length != 1){ 
      return sum(Arrays.copyOfRange(a, 0, a.length-1), 
         Arrays.copyOfRange(b, 0, a.length-1), 
         a[a.length-1]*b[b.length-1] + n); 
     } 

     return a[0] * b[0] + n; 
    } 
+0

非常感谢你:) – 2014-08-29 08:58:46

+0

欢迎你。然而,像其他人所说的那样,你的原始解决方案更好(并且不要求n作为参数,因为它然后不被使用) – Chris 2014-08-29 09:01:10

+0

罗杰先生我会这样做:)愿上帝保佑你 – 2014-08-29 09:02:40