Entschuldigung für diese grundlegende Frage, aber es hat schon ein paar Stunden von mir gedauert. Ausgabe: rechts ein Feld für die angegebenen Schritte, um zu verschieben Hier ist der Code:Rekursive Funktion nicht wie erwartet gestoppt
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;
}
Problem: Obwohl der while
Ausdruck ist dort die Rekursion zu kontrollieren, aus unerfindlichen Gründen nach den return resultArray;
erreicht Zeile, das Programm geht zurück auf die while
Ausdruck, so dass es ein falsches Ergebnis gibt! Dieses Verhalten ist beim Debuggen sichtbar.
Die Methodensignatur darf nicht geändert werden.
Jede Hilfe sehr geschätzt.
Entweder Schleife oder rekursiv - wählen Sie eine – pm100
Ersetzen Sie die while mit if. Vielleicht könnte es funktionieren. – MyIsaak
@MyIsaak: nur ersetzen, aber immer noch das falsche Ergebnis - es muss sonst noch wo ich den Fehler mache! – Ali