可以通过值传递数组到递归函数吗?

时间:2013-04-18 22:16:05

标签: c arrays recursion

我想编写一个递归函数,为问题构建所有可能的解决方案。我想我应该传递一个数组然后,在每个递归步骤中,将它设置为该递归步骤中可能的所有值,但后来我开始想知道这是否可行,因为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);        
        }
    }
}

3 个答案:

答案 0 :(得分:4)

您可以通过将数组粘贴到结构中来按值传递数组:

struct foo { int a[10]; };

void recurse(struct foo f)
{
    f.a[1] *= 2;
    recurse(f);    /* makes a copy */
}

答案 1 :(得分:3)

如果需要按值传递,则可以始终将数组包装到结构中并传递它。请记住,现在包含数组的数组仍然需要足够大才能处理所有情况。

答案 2 :(得分:3)

将其包裹在结构中。

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);
}