【问题标题】:Boolean recursion method布尔递归方法
【发布时间】:2016-05-23 09:54:22
【问题描述】:

所以到目前为止我一直在尝试练习递归,结果卡住了。

我必须编写一个bool 类型的方法,并采用两个参数(整数数组和整数)。该方法本身应该检查数组中的数字是否大于 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;
    }               
}

【问题讨论】:

  • 您确定要return sumofD(x, n -1) 吗?在这里你说直到x[n] &lt; 1000 继续执行n-1。 while 循环更适合这种情况
  • 我需要返回 true 或 false ,但是方法要递归编写
  • 你可以使用这个更具可读性的 LINQ 版本:bool allGreaterEqual1000 = x.Take(n-1).All(i =&gt; i &gt;= 1000)
  • 如果它调用自己是递归的。这是递归的基础,你需要注意的关键是确保有一个端点,主要是通过保护你的参数。例如。 if (n &lt; 0) return;
  • @TimSchmelter 当然有比递归方法更好的解决方案,但我认为 OP 专门练习递归,即使它是一个不好的递归示例。

标签: c# recursion boolean


【解决方案1】:

这不是递归的好例子,因为它更容易遍历数组。

无论如何,您忘记了递归的结束条件。如果n &lt; 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

我更改了返回递归调用结果的代码,语义上的意思是:“如果当前值大于 1000,则返回前导值的检查结果”。


更新:如果n 是要检查的元素数,您希望从x[n-1] 开始,因为数组是从0 开始索引的。并相应地更改n 的其他用法(之前检查n &lt;= 0 并使用n-2 递归调用)。

【讨论】:

    【解决方案2】:

    我认为这应该可行;

        public static bool sumofD(int[] x, int n)
        {
            n -= 1;
            if (n < 0) return true;
            return x[n] >= 1000 && sumofD(x, n - 1);
        }
    

    【讨论】:

      猜你喜欢
      • 2015-12-27
      • 1970-01-01
      • 2022-11-12
      • 2015-06-17
      • 2017-07-22
      • 2015-01-17
      • 2021-06-27
      • 2012-10-22
      • 1970-01-01
      相关资源
      最近更新 更多