我已经使用了3个嵌套循环。现在我想将这些循环转换为递归。 还有一种将循环转换为递归的一般方法?将嵌套循环转换为递归
#include <stdio.h>
#define f(x, y, z) ((x + y) * (y + z))
int main()
{
int test_case, p, q, r, i, j, k, a[100001], b[100001], c[100001], sum;
scanf("%d", &test_case);
while (test_case--) {
scanf("%d%d%d", &p, &q, &r);
sum = 0;
for (i = 0; i < p; i++) {
scanf("%d", &a[i]);
}
for (i = 0; i < q; i++) {
scanf("%d", &b[i]);
}
for (i = 0; i < p; i++) {
scanf("%d", &c[i]);
}
for (i = 0; i < q; i++) { // I have convert this to recursion.
for (j = 0; j < p; j++) {
for (k = 0; k < r; k++) {
if (b[i] >= a[j] && b[i] >= c[k]) {
sum += f(a[j], b[i], c[k]);
}
}
}
}
printf("%d\n", sum % 1000000007);
}
return 0;
}
一个3D循环不会简单地转换为递归。为了在函数式语言中做到这一点,我可能会创建一个所有不同索引排列的列表,然后递归循环索引。 – Carcigenicate
我看不到这一点。你为什么要使用递归而不是循环? – Stargateur
@Stargateur:嵌套循环占用更多时间,我试图优化我的代码。那么有什么更好的方法来优化它比使用递归。 – Jeff