C 是否可以将数组按值传递给递归函数?
我想写一个递归函数来建立问题的所有可能的解决方案。我想我应该传递一个数组,然后在每个递归步骤中,将它设置为该递归步骤中所有可能的值,但随后我开始怀疑这是否可行,因为C通过传递指针来传递数组。您通常如何处理此问题 我在想这些事情。根据选择的路径,数组将采用许多不同的值。我想我们真正想要的是按值传递数组C 是否可以将数组按值传递给递归函数?,c,arrays,recursion,C,Arrays,Recursion,我想写一个递归函数来建立问题的所有可能的解决方案。我想我应该传递一个数组,然后在每个递归步骤中,将它设置为该递归步骤中所有可能的值,但随后我开始怀疑这是否可行,因为C通过传递指针来传递数组。您通常如何处理此问题 我在想这些事情。根据选择的路径,数组将采用许多不同的值。我想我们真正想要的是按值传递数组 recFunc(int* array, int recursiveStep) { for (int i = 0; i < a; i++) { if (stopCondi
recFunc(int* array, int recursiveStep) {
for (int i = 0; i < a; i++) {
if (stopCondition) {
doSomething;
}
else if (condition) {
array[recursiveStep] = i;
recFunc(array, recursiveStep+1);
}
}
}
recFunc(int*array,int recursiveStep){
for(int i=0;i
通过将数组粘贴到结构中,可以按值传递数组:
struct foo { int a[10]; };
void recurse(struct foo f)
{
f.a[1] *= 2;
recurse(f); /* makes a copy */
}
如果需要按值传递,可以将数组包装成一个结构并传递它。请记住,现在包含结构的数组仍然需要足够大才能处理所有情况。将其包装在结构中
typedef struct arr_wrp {
int arr[128]; // whatever
} arr_wrp;
void recFunc(arr_wrp arr, int step) {
// do stuff, then
arr.arr[step] = i;
recFunc(arr, step + 1);
}
在您提供的实现中,您不需要复制数组,每个递归级别都会修改自己的元素。:-)。你从我这里得到+1是因为第一个原因(也是因为它是正确的)。谢谢你的回答!假设递归调用的数量很多,是首选其他方法还是这样做?@sporetrans首选方法不是反复复制数组。@H2CO3您如何在不复制数组的情况下递归求解它?不是说函数必须是递归的。所以这样做(在结构中包装数组)在某种意义上不是“好”的编程实践?谢谢