【发布时间】:2020-08-04 03:14:02
【问题描述】:
我有一个任务是编写代码来打印 N 字符的所有组合。例如,如果输入为 3,则预期输出必须为“aaa aab aac aba ... ccc”。但是我的代码一遍又一遍地循环。这是我的代码。
#include <stdio.h>
#ifndef MAX
#define MAX 5
#endif
void comb(char kar[], int size, int index) {
// string = aaa
// lim = 'd'
char lim = 'a' + size;
while (index != -1) {
if (kar[size-1] != lim) { // != c
for (int i = 0; i < size; i++) {
printf("%s ", kar);
kar[size-1]+=1;
}
return comb(kar, size, index);
} else {
while (kar[index-1] == lim && index != -1) {
kar[index-1]='a';
index--;
}
kar[index-1] += 1;
return comb(kar, size, size);
}
}
}
int main(int argc, char const *argv[]) {
int n;
char kar[MAX];
printf("Input N char : ");
scanf(" %d", &n);
for (int j = 0; j < n; j++) {
kar[j] = 'a';
}
comb(kar, n, n);
return 0;
}
我有点困惑,我不知道错误在哪里。谢谢。
【问题讨论】:
-
OT:提示:不要写
97,而是'a'。它更易读,更清楚地表明了你的意图。 -
稍微OT:零初始化kar数组像这样:
char kar[MAX] = { 0 };,否则你很可能会打印垃圾。 -
您只能将
n、index和size作为index参数传递,并且您永远不会在comb中分配给它,所以很难看出@987654330 @ 可能永远是假的。
标签: c recursion combinations