布尔递归方法

时间:2016-05-23 09:54:22

标签: c# recursion boolean

所以到目前为止我一直在努力练习递归,而且我被卡住了。

我必须编写一个类型为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;
    }               
}

2 个答案:

答案 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);
    }