Извините за этот основной вопрос, но он уже занял несколько часов. Выпуск: Чтобы сдвиг вправо массив для определенных шагов Вот код:Рекурсивная функция не остановлена, как ожидалось
static int[] ShiftRight(int[] arr, int shiftTimes)
{
if (shiftTimes == 0 || arr.Length == 0 || arr.Length == 1) return arr;
var resultArray = new int[arr.Length];
for (var i = 1; i < arr.Length; i++)
resultArray[i] = arr[i - 1];
resultArray[0] = arr[resultArray.Length - 1];
while (shiftTimes > 1)
{
shiftTimes--;
ShiftRight(resultArray, shiftTimes);
}
return resultArray;
}
Проблема: Хотя выражение while
есть контролировать рекурсию, по неизвестным причинам, после достижения return resultArray;
line, программа возвращается к выражению while
, чтобы он дал неправильный результат! Такое поведение наблюдается при отладке.
Подпись метода не может быть изменена.
Любая помощь очень ценится.
либо петля, либо рекурсия - выберите один – pm100
Замените while на, если. Возможно, это может сработать. – MyIsaak
@MyIsaak: просто замените, но все равно получите неправильный результат - должно быть еще, где я делаю ошибку! – Ali