测试示例:
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();
}
}
答案 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;
}