我编写了一个代码,用于计算数组中的负数,现在需要使用递归技术编写相同的代码。我是递归的新手,所以我不确定我是否在使用此代码进入正确的轨道。
public int countNeg (int[ ] nums, int n)
{
int neg = 0;
for (int index = 0; index < n; index ++)
if (nums[index] < 0)
neg++;
return neg;
}
对于递归代码,这就是我所做的:
public int countNeg (int[ ] nums, int n)
{
if (n < 0)
return 0;
else {
int neg = countNeg (nums, n-1);
if (nums[n-1] < 0)
return neg + 1;
else
return neg;
}
}
答案 0 :(得分:1)
n是索引的参数。 您可以使用以下方法:
int numberOfNegativeNumbers = countNeg(nums, 0);
方法:
public int countNeg (int[ ] nums, int n) {
if(n >= nums.length)
return 0;
else
return ((mums[n] < 0) ? 1 : 0) + countNeg(nums, n+1);
}
答案 1 :(得分:0)
@ Bilghen的回答已经提供了所需的解决方案。
但我会提供一种使用Tail Recursion技术的解决方案。
author = models.ForeignKey('auth.User', default=None, null=True, blank=True)
这样称呼它 -
public int countNeg (int[ ] nums, int index) {
return countNegTailRecur(nums, index, 0);
}
public int countNegTailRecur (int[ ] nums, int index, int total) {
if(index >= nums.length)
return total;
else
return countNeg(nums, index+1, nums[index] < 0 ? total + 1 : total);
}