各要素が [0 ... K] の値を持つことができ、すべての要素の合計が SUM である、長さ N のすべてのベクトルを列挙したいと考えています。
再帰関数を使用してこの問題を解決しましたが、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 3020 3011 3002 2300 2210 2201 2120 2111110220220202020202020202021200313101301 1220 1211 1211 1202 1130 1121 1112 1103 1031 1022 1013 0320 0311 0302 0230 0221 0212 0203 0131 0131 0122 0122 0122 011332222
0023