#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), а затем передает его функции.
Таким образом, в настоящее время ваш код будет вечно повторяться, обрабатывая только первое значение в массиве!