א) למה לא עם רקורסיה...
אם לא היית יודע שיש חסם עליון של 4 איך היית מסתדר?
public class r { private static void mySum(int array[]) { if(array.isEmpty) return 0; x=array.pop(); return (mySum(array)+x) array.add(x); } void main (String s[]) { for (int i=0; i<∞; i++) seek(new array(),i); } private static void seek(List array,int target) { if (mySum(array)==target) System.out.println(array.toString()+"="mySum(array)); double g=0; for (int i=0; i<target; i++) { array.add(i); seek(array,target); array.remove(i); } }
(לצורך העיניין POP מוציא את אחד האיברים במערך ומחזיר אותו כתוצאה, ADD מוסיף איבר, REMOVE מסיר איבר, ISEMPTY בודק אם המערך ריק (אם אין מבנה נתונים כזה בJAVA אפשר בקלות ליצור אחד כזה...) ב) התוכנה שלך לא מדפיסה לכל מספר איך מגיעים אליו, היא מדפיסה את כל המספרים (משום מה בלי איך מגיעים אליהם) בצורה מבולגנת - רק אם תמיין אותם לפי התוצאה זה יהיה בסדר... ג) וזה הכי קריטי - התוכנה שלך לא עוצרת, ומה שיותר גרוע היא לא מצליחה להגיע לתוצאה 4 אף פעם!. [התוכנה שלי עוצרת אבל שים לב ש: *היעילות שלה היא N בחזקת 4 (או N בחזקת 2 עם שיפור קטנטן) לכל מספר * היא לא שומרת תוצאות (אפשר לפתור את אותה בעיה לכל המספרים עד N ביעילות של N בריבוע - במקום לפתור את זה למספר ספציפי).]