我已經使用了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