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;
}

Antworten auf die Frage(5)

Ihre Antwort auf die Frage