C#递归函数添加

时间:2015-10-21 13:44:56

标签: c# recursion

测试示例:

b = 3

c = 19

常数= 4

总和= 55

(3 + 7 + 11 + 15 + 19 = 55)

逻辑是:使用递归函数

添加算术行的编号

但我的代码只输出"返回c"线

class Program
{
    static int Line(int b, int c, int constant, int sum)
    {

        if (b > c) return c;
        return (sum = sum + (Line(b+constant, c, constant, sum)));

    }
    static void Main(string[] args)
    {

        Console.WriteLine(Line(3,19,4,0));
        Console.ReadKey();
    }
}

2 个答案:

答案 0 :(得分:3)

完成调试(只需输入断点并查看正在进行的操作)后,您可以轻松找到两个错误您当前的实施:

    static int Line(int b, int c, int constant, int sum) {
      if (b > c) 
        return sum; // return "sum", not "c"

      // "= b +" not " = sum +"
      return (sum = b + (Line(b + constant, c, constant, sum)));
    }

答案 1 :(得分:2)

看起来你根本不需要传递sum。在这种情况下,如果需要,可以将其减少到一行。您也可能希望为参数选择更有意义的名称。

static int Line(int start, int end, int increment)
{
    return start > end? 0 : start + Line(start + increment, end, increment);
}

所以默认情况是start > end只返回0.否则你将start添加到下一个迭代中,即将increment添加到start并将其传递给递归电话。

或者,没有递归解决方案

static int LineNonRecursive(int start, int end, int increment)
{
    int sum = 0;
    while (start <= end)
    {
        sum += start;
        start += increment;
    }

    return sum;
}