Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 是否可以将数组按值传递给递归函数?_C_Arrays_Recursion - Fatal编程技术网

C 是否可以将数组按值传递给递归函数?

C 是否可以将数组按值传递给递归函数?,c,arrays,recursion,C,Arrays,Recursion,我想写一个递归函数来建立问题的所有可能的解决方案。我想我应该传递一个数组,然后在每个递归步骤中,将它设置为该递归步骤中所有可能的值,但随后我开始怀疑这是否可行,因为C通过传递指针来传递数组。您通常如何处理此问题 我在想这些事情。根据选择的路径,数组将采用许多不同的值。我想我们真正想要的是按值传递数组 recFunc(int* array, int recursiveStep) { for (int i = 0; i < a; i++) { if (stopCondi

我想写一个递归函数来建立问题的所有可能的解决方案。我想我应该传递一个数组,然后在每个递归步骤中,将它设置为该递归步骤中所有可能的值,但随后我开始怀疑这是否可行,因为C通过传递指针来传递数组。您通常如何处理此问题

我在想这些事情。根据选择的路径,数组将采用许多不同的值。我想我们真正想要的是按值传递数组

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您如何在不复制数组的情况下递归求解它?不是说函数必须是递归的。所以这样做(在结构中包装数组)在某种意义上不是“好”的编程实践?谢谢