簡體   English   中英

C#遞歸函數添加

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM