2

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

3 回答 3

4

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

struct foo { int a[10]; };

void recurse(struct foo f)
{
    f.a[1] *= 2;
    recurse(f);    /* makes a copy */
}
于 2013-04-18T22:18:58.780 回答
3

如果您需要按值传递,您总是可以将您的数组包装成一个结构并传递它。请记住,您现在包含的结构数组仍然需要足够大以处理所有情况。

于 2013-04-18T22:19:23.760 回答
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);
}
于 2013-04-18T22:20:05.767 回答