我想枚举长度为 N 的所有向量,其中每个元素的值可以为 [0 ... K] 并且所有元素的总和为 SUM。
我使用递归函数解决了这个问题,但是当我在 CUDA CI 中重新输入时收到一条消息,即 CUDA C 不支持递归函数。在此之后,我做了一些更改并在不使用递归的情况下重写了该函数,但该函数是布尔型的,CUDA C 也不支持这一点,因为在不调用其他函数的情况下主全局函数必须是无效的。现在我没有想法了,有什么帮助吗?
递归函数如下:
private static void computeVectors(int[] n, int sum, int k, int k1, int i) {
if (sum == 0) {
printVectors(n, n.length);
} else if (i < n.length) {
for (int j = k; j >= 0; j--) {
if (j <= k1) {
n[i] = j;
computeVectors(n, sum - j, sum - j, k1, i + 1);
}
}
}
}
private static void printVectors(int p[], int n) {
for (int i = 0; i < n; i++) {
System.out.print(p[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
// TODO code application logic here
computeVectors(new int[4], 5, 3, 3, 0);
}
此示例的输出为:
3200 3110 3101 3020 3011 3002 2300 2210 2201 2120111 2111 211120202020202021 2012 2003 2003 1310 1310 1301 1220 1211 1211 12102 1130 1121 1121 1112 1112 1103 1031 1022 1013 1013 1013 0320 0320 0320 0311 0310 2310230 02330 0221 0221 0221 02212120212 020301301301312222222222222222222222222222222222222222222222222222222222222222222222222222222222222222转
0023