Mit Rekursion schreiben Sie ein Programm, das eine Liste von ganzen Zahlen und einer gegebenen Summe gibt, findet alle Teilmengen der Zahlen, deren Summe die gegebene Summe ist. Zählen Sie die Anzahl der gefundenen Teilmengen. Wenn keine Untergruppe vorhanden ist, sollten Sie angeben, dass keine Lösung gefunden wird. Zum Beispiel, da die Liste 6, 13, 3, 3, und die Summe ist 19, soll Ihr Programm findet zwei Lösungen:Finden von Teilmengen von Zahlen mit einer gegebenen Summe
6 + 13 = 19
13 + 3 + 3 = 19
begrenzen die Anzahl der ganzen Zahlen in der Eingabeliste auf maximal 20 Zahlen. Akzeptieren Sie nur positive ganze Zahlen und verwenden Sie 0, um das Ende der Liste zu markieren. Das folgende ist ein Probelauf:
Enter positive integers terminated with 0: 6 13 3 3 0
Enter the desired sum: 19
Solution 1:6 +13 =19
Solution 2: 13 +3 +3 =19
Found 2 solutions
dies ist mein Code, aber es ist nur ein Untersatz zu finden, ich will alle Untersätze finden. irgendeine Hilfe?
public static boolean SubSetSum(int start, int[] nums, int target) {
if (start >= nums.length) {
return (target == 0);
}
if (SubSetSum(start + 1, nums, target - nums[start])) {
System.out.println(nums[start]);
return true;
}
if (SubSetSum(start + 1, nums, target)) {
return true;
}
return false;
}
public static void main(String[] args) {
int[] mySet = {4,1,3,2};
int sum = 5;
System.out.println("The Goal is : " + sum);
SubSetSum(0,mySet, sum) ;
}
}
Als Debugging-Hinweis, anstatt die Methode direkt in der if-Bedingung aufzurufen, erstellen Sie einen booleschen Wert, der das Ergebnis des Aufrufs 'SubSetSum() 'ist. – Brydenr
Nun, schau dir deinen Code an. Wenn "Ziel == 0" an * irgendeinem * Punkt, dann haben Sie Ihr Ziel getroffen, aber Sie haben nicht den Code dafür. Sie überprüfen nur, ob 'target == 0' wenn' start' am Ende des Arrays ist. Das ist auf den ersten Blick das größte Problem. Ein weiterer Debugging-Hinweis ist das Ausdrucken der Funktionsparameter in der ersten Zeile der Funktion, so dass Sie alle Aufrufe verfolgen können. –
@ItamarGreen SO's Frage Richtlinien (Sie wissen, diejenigen, die Sie normalerweise in Kommentaren beschweren würden) sind: Genaue Problembeschreibung, Aufwand gemacht, kompilierbares Beispiel, tatsächliche und erwartete Ausgabe. Scheint, als ob es alle Kriterien für mich erfüllt. –