如何将该迭代函数转换为递归? 有问题的函数在给定距离的情况下查找数组中的任何对。顺便说一下,这是C语言
int * findPair(int * array, int size, int distance)
{
int * result = (int*)malloc(sizeof(int)*3);
result[0] = 0;
result[1] = 0;
result[2] = 0;
for (int i = 0; i < size; i++)
{
for (int j = 1; j < size; j++)
{
int diff = array[i] - array[j];
if (diff == distance) // found a pair
{
result[0] = 1;
result[1] = array[i];
result[2] = array[j];
break;
}
}
}
return result;
}
答案 0 :(得分:1)
开始于:
将迭代方法转换为递归方法很少是一个好主意。您几乎总是应该选择迭代而不是递归。换句话说:仅当递归给您带来其他方面难以实现的东西时,才使用递归。
反正...
有很多方法可以使用递归来实现您想要的。
下面只是一个例子。 但是,我故意只删除了内部循环。代码应为您提供有关该原理的想法,然后(作为练习)您可以自己删除剩余的循环,以便获得“纯递归”没有任何for循环的方法。
void findPair_rec(int num, int * array, int size, int distance, int* res)
{
assert(*res == 0);
if (size == 0) return; // Reach the end - no match - just return
if ((num - *array) == distance)
{
// Match found - update result and return
res[0] = 1;
res[1] = num;
res[2] = *array;
return;
}
// Recursion - advance array pointer and decrement size
findPair_rec(num, array + 1, size - 1, distance, res);
}
int * findPair(int * array, int size, int distance)
{
int * result = calloc(3, sizeof *result);
for (int i = 0; i < size && result[0] == 0; i++)
{
findPair_rec(array[i], array, size, distance, result);
}
return result;
}
答案 1 :(得分:1)
我喜欢递归。
要递归地解决该问题,请将其最小化为0大小的数组或1大小的数组...,然后从中减少到(n-1)大小的数组
df.to_csv("blah.txt", index=False)