0

我在使用递归时遇到问题。我想在给定的两个数字范围内打印并添加偶数。例如:范围在 3 到 9 之间。所以输出应该是:4+6+8=18。

printSeries(3,9);
Console.WriteLine("=" + sum);
int sum = 0;

            int printSeries(int number, int number2)
            {
                if (number < 1)
                {
                    number = 1;
                }
                if (number2 < number)
                {
                    if (number % 2 == 0)
                    {
                        return number;
                    }
                    return number + number % 2;
                }
                else
                {
                    int num = printSeries(number, number2 - 2);
                    Console.Write("+" + num);
                    sum += num;
                    return num += 2;
                }
            }

更新:我得到的输出是正确的,但是当两个数字都是奇数时,会有一个额外的迭代。例如:范围是 3,9:4+6+8+10=28。

4

3 回答 3

1

我不完全是你的目标,但我测试你的代码,然后在第二部分更改你的代码

 private static void Main(string[] args)
    {
        // PrintSeries(7, 13);
        PrintSeries(2, 8);
        Console.WriteLine("=" + sum);
        System.Console.ReadKey();
    }

    private static int sum = 0;
    private static int PrintSeries(int number, int number2)
    {
        if (number < 1)
        {
            number = 1;
        }
        if (number2 <= number)
        {
          if (number % 2 == 0)
            {
                return number;
            }
            return number + number % 2;
        }
        else
        {

            int num = PrintSeries(number, number2 - 2);
            Console.Write("+" + num);
            sum += num;
            return num += 2;
        }
    }
于 2019-10-19T09:29:20.480 回答
0

您可以使用以下内容:

public int SumOfEvenNumbersInRange(int start, int end, IList<int> elements)
{
    int CreateSum(int current, int sum)
    {
        if (current > end)
        {
            return sum;
        }
        else
        {
            elements.Add(current);
            return sum + current + CreateSum(current + 2, sum);
        }
    }

    if (Math.Abs(start) % 2 == 0)
        return CreateSum(start, 0);

    return CreateSum(start + 1, 0);
}

这使用本地函数来执行实际的递归工作。然后你可以像这样使用它:

var elements = new List<int>();
var sum = SumOfEvenNumbersInRange(7, 13, elements);

if (elements.Count == 0)
{
    elements.Add(0);
}

Console.WriteLine($"{string.Join(" + ", elements)} = {sum}");

像上面那样使用它会打印以下内容:

8 + 10 + 12 = 30   // SumOfEvenNumbersInRange(7, 13, elements)
2 + 4 + 6 + 8 = 20 // SumOfEvenNumbersInRange(2, 8, elements)
于 2019-10-19T10:53:23.007 回答
0
 string str="";
 int sum=0;
 Void printSeries(int number, int number2)
        {

          for(int i=number;i<=number2;i++){
          if(i%2==0){
            sum += i;
            if(i!=number){
                str += "+"+i; 
            }else{
                str += i;
            }                
          }
          }
          Console.WriteLine(str + "=" + sum);
          printSeries(7,13);

       }
于 2019-10-19T09:37:35.753 回答