我正在尝试编写一个递归函数,它返回数组中前n个位的总和。这是我的代码(Java):
static int sumN(int[] A, int n)
{
if (n == 0) return n;
return sumN(A, (n-1)) + A[n];
}
这不按预期工作。你有什么想法?我也缺乏足够的if-n-is-strange-return-something-else。
答案 0 :(得分:4)
试试这个:
public static int sumN(int[] A, int n) {
if (n <= 0)
return 0;
return A[n-1] + sumN(A, n-1);
}
索引存在一些问题,请记住Java中的数组是基于0的。您可以验证它是否按预期工作:
int[] a = {1, 2, 10, -7, 8, 99};
System.out.println(sumN(a, 4));
=> 6
答案 1 :(得分:0)
您不应该返回n
,而是A[0]
。另外,我添加了一个超出范围的检查。
static int sumN(int[] A, int n) {
if (n < 0 || n > A.length - 1) return 0; // or some error value
if (n == 0) return A[0]; // so not n
return sumN(A, (n-1)) + A[n];
}
答案 2 :(得分:0)
为什么在使用直接方式对数字求夏时使用递归方法:)
答案 3 :(得分:0)
直接从netbeans IDE看这个解决方案:)
它工作得很好:)