c - 打印数组中所有可能的元素组合
问题描述
在递归期间,一旦数组中的元素发生变化,这种变化就会持续存在。如何传递数组以便根据调用堆栈完成更改?一旦设置了索引 2 处的元素,它就会在每个函数调用中设置。
这是代码:
#include<stdio.h>
void recur(int flag[], int n, int idx){
if(idx==n){
for(int i=0; i<n; i++)
if(flag[i])
printf("%d ", i);
printf("\n");
return;
}
recur(flag, n, idx+1);
flag[idx] = 1;
recur(flag, n, idx+1);
}
int main(){
int flag[] = {0, 0, 0};
recur(flag, 3, 0);
return 0;
}
它给了我以下输出:
2
1 2
1 2
0 1 2
0 1 2
0 1 2
0 1 2
解决方案
如果您想保持数组完整,您需要恢复您在函数中对数组所做的任何更改。在这种情况下,您应该将更改之前的值存储在临时变量中flag[idx]
,然后将其恢复:
#include <stdio.h>
void recur(int flag[], int n, int idx) {
if (idx == n) {
for (int i = 0; i < n; i++) {
if (flag[i]) {
printf("%d ", i);
}
}
printf("\n");
return;
}
recur(flag, n, idx + 1);
int temp = flag[idx]; // Change line 1
flag[idx] = 1;
recur(flag, n, idx + 1);
flag[idx] = temp; // Change line 2
}
int main() {
int flag[] = {0, 0, 0};
recur(flag, 3, 0);
return 0;
}
在 ideone 中查看:https ://ideone.com/Q6Vb7A
推荐阅读
- php - 未定义的属性函数成功警告
- java - 根据 ID 的长度过滤 Firestore 查询
- python - Pandas 在转换错误时检测到有问题的列
- python - 如何只读取 CSV 文件的一部分?
- c++ - 查找数组的最低元素
- git - Git 推送到需要 ssh 密钥的远程
- c# - 传入字典的模型项的类型为 'System.Data.Entity.DynamicProxies.Tbl_Categorys
- visual-studio-code - VS Code 1.15.1 运行代码工具栏不像以前那样显示为绿色
- java - 模式和匹配器没有给出它应该在 java 中给出的结果
- flutter - Stream 构建一堆 Widget