我想编写一个递归函数,以构建问题的所有可能解决方案。我当时想我应该传递一个数组,然后在每个递归步骤中将其设置为该递归步骤中所有可能的值,但随后我开始怀疑这是否可行,因为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);
}
}
}
您可以通过将值粘贴到结构中来按值传递数组:
struct foo { int a[10]; };
void recurse(struct foo f)
{
f.a[1] *= 2;
recurse(f); /* makes a copy */
}
感谢您的回答!假设递归调用的数量是很多,是采用其他某种方式还是这种方式?
@sporetrans首选方法是不要一遍又一遍地复制数组。
@ H2CO3您如何在不复制数组的情况下递归解决它?并不是必须要递归的函数。因此,以这种方式(将数组包装在struct中)在某种意义上不是“好的”编程实践吗?谢谢