首页 > 解决方案 > 在java中使用递归查找数组中正元素的总和

问题描述

嗨,我只是在学习递归,我正在尝试用 Java 编写一个递归程序来查找数组中所有正元素的总和。使用:这是预期的输出:
0 5 7 3 0 17

import java.util.Arrays;
public static void main(String[] args) {
    int[] list0 = new int[] {};
    int[] list1 = new int[] { 5 };
    int[] list2 = new int[] { 3, 4 };
    int[] list3 = new int[] { -2, 3, -4 };
    int[] list4 = new int[] { -1, -2, -4, -5 };
    int[] list5 = new int[] { 6, 1, 2, -3, 8 };
}
public static int sumOfPositivesRecursive (int[] a) {
    return sumOfPositivesHelper(a, a.length);
}

public static int sumOfPositivesHelper(int[] a, int n) {
    if(n == 0) {
        return 0;
    }
    System.out.println(n);
    int total = 0;
    if(a[n-1] > 0) {
        total += a[n-1];
        sumOfPositivesHelper(a, n-1);
    }
    return total;
}

我的输出:0 5 4 0 0 8,似乎只在第一次检查最后一个元素并且不再循环。请帮助我知道我在递归调用中做错了什么。谢谢大家。

标签: javaarraysrecursion

解决方案


import java.util.Arrays;

public class HelloWorld{

public static void main(String[] args) {
    int[] list0 = new int[] {};
    int[] list1 = new int[] { 5 };
    int[] list2 = new int[] { 3, 4 };
    int[] list3 = new int[] { -2, 3, -4 };
    int[] list4 = new int[] { -1, -2, -4, -5 };
    int[] list5 = new int[] { 6, 1, 2, -3, 8 };

    int sum = sumOfPositivesRecursive(list5);
    System.out.println("the sum of all positive number is " + sum);
}

public static int sumOfPositivesRecursive (int[] a) {
    int i =0;
    return sumOfPositivesHelper(a, i, 0);
}

public static int sumOfPositivesHelper(int[] a, int i, int sum) {
    if(i == a.length) {
        return sum;
    }
    if(a[i] > 0) {
        sum+= a[i];
        return sumOfPositivesHelper(a, ++i, sum);
    }else{
        return sumOfPositivesHelper(a, ++i, sum);
    }
  }
}

刚刚成功,但概念保持不变,只是缺少一些回报;)


推荐阅读