我正在试图理解我教授用于教授排列的代码,我不知道if语句中的“(!used [i])”是什么意思或者是什么。这是完整的函数,if语句在for循环中。任何人都可以解释它的作用吗?
void RecursivePermute(int n, int k, int* perm, int* used) {
int i;
// We've filled perm already. Print the corresponding permutation.
if (k == n) {
for (i=0; i<n; i++)
printf("%d ", perm[i]);
printf("\n");
}
// Try each unused number in spot k.
for (i=0; i<n; i++) {
if (!used[i]) { //this if statement is my question
perm[k] = i;
used[i] = 1;
RecursivePermute(n, k+1, perm, used);
used[i] = 0;
}
}
}
答案 0 :(得分:3)
这意味着不是,因此会在if
元素int
时触发used[i] == 0
语句,因此它也可以写为:
if (used[i] == 0) {
...
}
答案 1 :(得分:1)
used
是一个整数数组。做
if (!used[i])
检查当前元素是否为0
递归函数的作用是每次打印数组然后将1放在下一个元素中,导致perm
(和输出)看起来像,取决于主动权k:
00000
01000
01200
01230
。 。
答案 2 :(得分:1)
如果变量为0,则真值语句将变量视为false,如果是其他变量,则将变量视为真。 !是非运营商。因此,used [i]将执行相反的操作,如果使用[i]为零则返回true,否则返回false。