¿Cómo implementar una función recursiva para guardar los elementos del producto cartesiano N-ésimo de (0,1,…,N) en C ++?
Si la pregunta no está clara, quiero tener, por ejemplo, si N=4, un resultado como este:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 . . . .
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 . . . .
0 0 0 0 0 1 1 1 1 1 2 2 2 2 3 3 3 3 . . . .
0 1 2 3 4 0 1 2 3 4 1 2 3 4 1 2 3 4 . . . .
Esta es mi función:
int Combinazioni(int i, int N, vector<>> & combs){
if(i
donde combs es un vector de vectores que he inicializado con N filas, y luego lo transpondré para una mejor accesibilidad…
Cuando lo compilo me da esto:
advertencia: el control alcanza el final de una función que no devuelve nada [-Wreturn-type]
y cuando lo ejecuto imprime:
0
0 0
0 0 0
0 0 0 0
Definitivamente debe haber algún error en la lógica de mi recursión, pero no soy muy bueno visualizándolo, así que si hay una manera fácil y elegante de hacer esto o de resolver el error, estaría agradecido, gracias.
P.D. Creo que no es realmente necesario que sea súper eficiente, y de hecho, si hay una mejor alternativa a la recursión o alguna biblioteca efectiva, también sería bueno para mi propósito.
davy.ai
La función Combinazioni parece tener un par de errores lógicos:
El segundo bucle for también debería venir antes de la declaración de retorno, ya que tiene la intención de llenar los vectores internos con el mismo número de elementos.
Aquí hay una versión modificada de la función que debería funcionar:
esto debería imprimir:
¡espero que esto ayude! j++){=”” cout=”” <<=”” combs[i][j]=”” <<=”” “;=”” }=”” cout=”” <<=”” endl;=”” }=””
="" esto="" debería="" imprimir:=""
=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” …=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” 0=”” …=”” 0=”” 0=”” 0=”” 0=”” 0=”” 1=”” 1=”” 1=”” 1=”” 1=”” 2=”” 2=”” 2=”” 2=”” 3=”” 3=”” 3=”” 3=”” 3=”” 3=”” …=”” 0=”” 1=”” 2=”” 3=”” 4=”” 0=”” 1=”” 2=”” 3=”” 4=”” 1=”” 2=”” 3=”” 4=”” 1=”” 2=”” 3=”” 4=”” 3=”” 4=”” …=”” “`=”” ¡espero=”” que=”” esto=””></combs[i].size(); j++){cout << combs[i][j] << ” “;
}
cout << endl;
}
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 …
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 …
0 0 0 0 0 1 1 1 1 1 2 2 2 2 3 3 3 3 3 3 …
0 1 2 3 4 0 1 2 3 4 1 2 3 4 1 2 3 4 3 4 …
“`
¡espero que esto ayude!>