Ho bisogno di una cosa un po' strana a cui non riesco a venirne fuori, vorrei solo sapere come farlo a livello logico, che poi per la codifica ci penso io.
Io ho un valore e un array, ad esempio
int x = 8;
int v[] = {4, 7, 3, 1};
vorrei sapere, tramite il codice, se è possibile ottenere il valore x sommando i numeri nel vettore v.
Nell'esempio, questo ipotetico metodo, dovrebbe ritornare vero poiché 4 + 3 + 1 = 8
Ma se invece x=9; allora dovrebbe ritornare falso perché non c'è nessuna combinazione la cui somma dà 9.
A livello di analisi, ho creato un metodo ricorsivo che, però, va in loop ricevendo un errore di stack overflow, il metodo è il seguente:
Il fatto che sia una map o un array è irrilevante.codice:private static boolean existValueC(int x) { int k; for(k=x; k>0; k--){ if(k!=(x-k)){ if(map.containsValue(k)&&map.containsValue(x-k)) return true; } else if(containsTwoTimes(k)) return true; } for(k=x; k>0; k--) if(existValueC(x)&&map.containsValue(x-k)) return true; for(k=x; k>0; k--) if(map.containsValue(k)&&existValueC(x-k)) return true; for(k=x; k>0; k--) if(existValueC(k)&&existValueC(x-k)) return true; return false; } private static boolean containsTwoTimes(int k) { map.put(getKeyByValue(map, k), 0); return map.containsValue(k); } public static <T, E> T getKeyByValue(Map<T, E> map, E value) { for (Entry<T, E> entry : map.entrySet()) { if (value.equals(entry.getValue())) { return entry.getKey(); } } return null; }
Potete aiutarmi?


Rispondi quotando