Segmentierungsfehler aufgrund von Rekursion
Ich schreibe ein Programm, das eine Zahl zwischen 1 und 10 annehmen und alle möglichen Arten der Anordnung der Zahlen anzeigen soll.
Ex Eingang: 3 Ausgang:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
Immer wenn ich 9 oder 10 eingebe, gibt das Programm einen Segmentierungsfehler aus und gibt den Core aus. Ich glaube, das Problem ist, dass mein rekursiver Algorithmus zu oft aufgerufen wird. Könnte jemand darauf hinweisen, wie ich die Anzahl der erforderlichen rekursiven Anrufe begrenzen könnte? Hier ist mein aktueller Code:
void rearange(int numbers[11], int index, int num, int fact) {
int temp = numbers[index];
numbers[index] = numbers[index-1];
numbers[index-1] = temp;
int i;
for (i = 1; i <= num; ++i) // print the current sequence
{
printf("%d ", numbers[i]);
}
printf("\n");
fact--; // decrement how many sequences remain
index--; // decrement our index in the array
if (index == 1) // if we're at the beginning of the array
index = num; // reset index to end of the array
if (fact > 0) // If we have more sequences remaining
rearange(numbers, index, num, fact); // Do it all again! :D
}
int main() {
int num, i; // our number and a counter
printf("Enter a number less than 10: ");
scanf("%d", &num); // get the number from the user
int numbers[11]; // create an array of appropriate size
// fill array
for (i = 1; i <= num; i++) { // fill the array from 1 to num
numbers[i] = i;
}
int fact = 1; // calculate the factorial to determine
for (i = 1; i <= num; ++i) // how many possible sequences
{
fact = fact * i;
}
rearange(numbers, num, num, fact); // begin rearranging by recursion
return 0;
}