[英]C# Recursive function adding
測試示例:
b = 3
c = 19
常數= 4
總和= 55
(3 + 7 + 11 + 15 + 19 = 55)
邏輯是:使用遞歸函數將算術行的數字相加
但是我的代碼僅輸出“ return 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();
}
}
調試之后 (只需放置斷點並查看發生了什么),您就可以輕松地在當前實現中發現兩個錯誤 :
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)));
}
看起來根本不需要傳遞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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.