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