所以到目前为止我一直在努力练习递归,而且我被卡住了。
我必须编写一个类型为bool
的方法,并且需要两个参数(int和int数组)。该方法本身应检查数组中的数字是否大于1000。
根据第二个参数,它应该只检查那些数字。因此,如果数组为4, 5, 1001, 1003
且第二个参数为3
,则只应检查数组中的前3个值(4,5,1001
)。在这种情况下,它应返回false,因为4和5小于1000.但如果前3个值大于1000,则方法应返回true。
这是我方法的残羹剩饭。我以前做了很多尝试
我有点困惑,它应该如何与Boolean
一起使用。
public bool sumofD(int [] x , int n)
{
if (x[n] < 1000)
{ return false; }
else
{
sumofD(x, n - 1);
return true;
}
}
答案 0 :(得分:4)
它不是递归的好例子,因为通过数组迭代会更容易。
无论如何,你忘记了递归的最终条件。如果n < 0
:
public bool sumofD(int [] x , int n)
{
// check if you already checked all values
if (n <= 0) return true;
if (x[n - 1] < 1000) // use n-1
{ return false; }
else
// return if all the leading values are > 1000
return sumofD(x, n - 2);
}
你的第二个错误就是return true
,无论你的递归回复是什么。
我更改了它返回递归调用结果的代码,从语义上来说:&#34;如果当前值大于1000,则返回检查前导值的结果&#34;。
更新:如果n
是要检查的元素数,则您希望从x[n-1]
开始,因为数组是0索引的。并相应地更改n
的其他用法(先检查n <= 0
并使用n-2
进行递归调用)。
答案 1 :(得分:1)
我认为这应该有用;
public static bool sumofD(int[] x, int n)
{
n -= 1;
if (n < 0) return true;
return x[n] >= 1000 && sumofD(x, n - 1);
}