【发布时间】:2017-01-14 15:59:48
【问题描述】:
我正在尝试对最多包含 8 个字符的字符串进行排列。问题是它必须通过递归来完成,并且必须按照字典顺序。我找到了一种递归解决方案,但它最多只能用于 4 个字符。之后又开始乱了。
void swap(char* a, char* b){
char temp = *a;
*a = *b;
*b = temp;
}
void recursion(char* arr, int start, int n){
if (start == (n-1)){
printf("%s\n", arr);
return;
}
for (int i = start; i < n; i++){
recursion(arr, start+1, n);
swap(arr+start+1, arr+n-1);
int j = start+1;
while (j < n && arr[start] > arr[j]){
j++;
}
if (j >= n){
continue;
}
swap(arr+start, arr+j);
}
swap(arr+start+1, arr+n-1);
}
int main(int argc, char *argv[]) {
char arr[9];
char charakter;
int m = 0;
while (scanf("%c", &charakter) != EOF){
if (charakter == '\n'){
break;
}
else if (isalpha(charakter) || isdigit(charakter)){
arr[m] = charakter;
m++;
}
else{
fprintf(stderr, "Error!\n");
return 100;
}
}
arr[m] = '\0';
int n = strlen(arr);
int start = 0;
recursion(arr, start, n);
return 0;
}
知道如何修复递归函数吗?
【问题讨论】:
-
你能举个斧头的例子吗?
标签: c recursion permutation alphabetical lexicographic