Te lo scrivo in pseudocodice che poi te lo porti in Java (non sono un esperto del linguaggio )
Codice:
List<Vector> LinearComb(Vector Input)
{
List<Vector> Result;
Vector Temp;
Result.Add(Temp);
for i = 0 to Input.Size()
{
int k = Input[0];
Input.RemoveFirstElement();
foreach (Vector v in LinearComb(Input))
{
Temp.Add(k);
Temp.Merge(v);
Result.Add(Temp);
Temp.Clear();
}
}
}
Se c'è qualcosa di poco chiaro, chiedi pure. E stai attento ai passaggi per reference quando implementi, ho dato per scontato che i passaggi siano tutti per valore.
Edit: Come cavolarola è possibile che hai problemi con un algoritmo così banale al terzo anno di Ing Informatica ? Senza offesa ...