数组被随机元素填充(负数和正数)。现在我想计算只有正元素的总和。
迭代没有问题,但在递归版本中我只能得到负数和正数之和。
如何在递归版本中“检查”它只能总结正面元素?
迭代版本:
public int IterSomPosElem(int[] tabel, int n)
{
n = 0;
for (int i = 0; i < tabel.Length; i++)
{
if (tabel[i] >= 0)
{
n += tabel[i];
}
}
return n;
}
目前的递归版本(总结所有元素而不仅仅是积极的):
public int RecuSomPosElem(int[] tabel, int n)
{
if(n == 1)
return tabel[0]; //stopCriterium
else
{
return (tabel[n - 1] + RecuSomPosElem(tabel, n - 1)); // how to check, so it only sums up the postive elements and "ignores" the negative elements.
}
}
答案 0 :(得分:2)
这是家庭作业吗?为什么需要使用递归函数来执行此操作?
在现实世界中,它将是一些简单的LINQ
int positiveSum = tabel.Where(i => i > 0).Sum();
答案 1 :(得分:2)
怎么样
int foo[] = new [] {1, -9, 10, 8, -16, ...};
int sumOfPostiveInts = foo.Sum(x => x < 0 ? 0 : x);
or...foo.Where(x => x > 0).Sum();
答案 2 :(得分:0)
喜欢什么?
public int RecuSomPosElem(int[] tabel, int n)
{
if(n == 1)
return tabel[0]; //stopCriterium
else
{
var valueToSum = tabel[n - 1] > 0 ? tabel[n - 1] : 0;
return (valueToSum + RecuSomPosElem(tabel, n - 1));
}
}
答案 3 :(得分:0)
public int RecuSomPosElem(int[] tabel, int n)
{
if(n == 1)
return tabel[0]; //stopCriterium
else
{
if (tabel[n - 1] > 0)
return (tabel[n - 1] + RecuSomPosElem(tabel, n - 1));
else
return RecuSomPosElem(tabel, n - 1));
}
}
答案 4 :(得分:0)
你真是太近了!使用您的算法,但只需添加一个检查以查看表中的当前值是否为负数。如果为负,则转到下一个数组项:
private static int RecuSomPosElem(int[] tabel, int n)
{
int i = n - 1;
while (tabel[i] < 0 && i > 0)
i--;
if (i == 0)
{
return 0; //stopCriterium
}
else
{
return (tabel[i] + RecuSomPosElem(tabel, i));
}
}
答案 5 :(得分:0)
使用此:
public int Rsum(int[] data, int currentIndex, int LastIndex)
{
if(currentIndex < LastIndex)
{
if (data[currentIndex] > 0)
{
return (data[currentIndex] + Rsum(data, ++currentIndex, LastIndex));
}
else
{
return Rsum(data, ++currentIndex, LastIndex);
}
}
return 0;
}
答案 6 :(得分:-1)
查看是否可以解决:
public int sumPositiveNumbersR(int[] v, int n){
int sum;
if(n < 0) return 0; //stopCriterium
else{
if(v[n] > 0){
sum = v[n] + sumPositiveNumbersR(v, n-1); //scrolls the vector and sum
return sum;
}else
return sumPositiveNumbersR(v, n-1); //scrolls the vector
}