Как выполнить функцию рекурсии, которая получает массив, найти его сумму и целые числа в массиве, которые делят сумму

#c# #arrays #recursion #sum

#c# #массивы #рекурсия #сумма

Вопрос:

Мне нужна помощь для создания рекурсивной функции в C #.

Функция получает int массив, который находит его сумму и печатает все числа в массиве, которые делят сумму.

Вы не можете создать цикл внутри функции или создать отдельный.

Моя идея была примерно такой, но она не работает.

     static public void print(int[] array, int sumIndex = 0, int sum = 0,int devIndex = 0)
    {
        if (sumIndex < array.Length)
        {
             sum = sum   array[sumIndex];
             print(array, sumIndex  , sum, devIndex);
        }
        else
        {
            if (sum % array[devIndex] == 0) 
            {
                 Console.WriteLine(array[devIndex]);
                 print(array, sumIndex, sum, devIndex  );
            }
        }
    }
 

Комментарии:

1. «это не работает» не является разумной постановкой проблемы для переполнения стека. Вам нужно быть более конкретным. Пожалуйста, объясните, что на самом деле происходит не так, как вы ожидаете.

2. Я бы предположил, что это школьная работа. Я бы настоятельно рекомендовал научиться использовать отладчик. Это позволяет вам пошагово выполнить программу и проверить значение всех переменных, это позволяет вам проверить свои предположения о том, что должно произойти. Подсказкой было бы протестировать программу с небольшим массивом, скажем {1, 2, 3}. Что произойдет, если вы добавите еще одно число, скажем, 4? Что произойдет, если вы измените порядок чисел в обратном порядке?

3. Также. В вопросе должно быть указано » равномерно разделить сумму». В противном случае это не имеет особого смысла.

Ответ №1:

Добрый вечер, я полагаю, ваша проблема в том, что вы используете оператор постинкремента, а не оператор предварительного инкремента. изменить

 print(array, sumIndex  , sum, devIndex);
 

и

 print(array, sumIndex, sum, devIndex  );
 

Для

 print(array,   sumIndex, sum, devIndex);
 

и

 print(array, sumIndex, sum,   devIndex);
 

Разница между этими двумя заключается в том, что первый передает значение функции (скажем, 1), затем увеличивает его, где второй увеличивает его (таким образом, обновляет его с 1 до 2), а затем передает его функции.

Таким образом, в настоящее время ваш код будет вечно повторяться, обрабатывая только первое значение в массиве!