java - 在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,似乎只在第一次检查最后一个元素并且不再循环。请帮助我知道我在递归调用中做错了什么。谢谢大家。
解决方案
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);
}
}
}
刚刚成功,但概念保持不变,只是缺少一些回报;)
推荐阅读
- excel - Excel:通过从另一个选项卡中引入相应的单元格来填充新列
- algorithm - 为 sha256 创建 2 路地图。
- java - while 循环会在一段时间后停止执行吗?
- python - Visual Studio Code 不建议 Python 对象属性
- html - CSS 内置内容不起作用
- javascript - NavigationEnd 的 url 属性返回未定义(Angular 6)
- c# - ASP.NET w/ Identity:Entity Framework 在 SaveChanges 上抛出 System.Data.Entity.Core.UpdateException
- android - HighCharts For Android 导出按钮
- laravel - 在 Laravel Dusk 中记录 Javascript 控制台输出
- coinbase-api - 非身份验证端点需要 Coinbase API 密钥?