Как найти четные числа между диапазонами с помощью рекурсии? - PullRequest
0 голосов
/ 19 октября 2019

У меня проблемы с использованием рекурсии. Я хочу напечатать и добавить четные числа между заданным диапазоном двух чисел. Например: диапазон составляет от 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.

Ответы [ 3 ]

1 голос
/ 19 октября 2019

Я не являюсь вашей целью точно, но я проверяю ваш код и затем изменяю ваш код во втором разделе

 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;
        }
    }
0 голосов
/ 19 октября 2019

Вы можете использовать следующее:

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)
0 голосов
/ 19 октября 2019
 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);

       }
...