יש לך מערך A, בגודל N, ואתה רוצה למצוא את כל האפשרויות הללו. נקרא לפונקציה
שמחזירה אותן מצא-אפשרויות(A). מה שהיא צריכה לעשות זה למצוא את כל האפשרויות
בגדלים 1,2,3...N. כלומר, לקרוא לפונקציה אחרת, שנקרא לה מצא-אפשרויות-בגודל(A,N),
ולקרוא לה בערך כך:
- עבור i מ-1 עד N
- מצא-אפשרויות-בגודל(A,i)
- הוסף תוצאה לרשימה
- החזר רשימת תוצאות
עכשיו, איך נראית מצא-אפשרויות-בגודל(A,N)? לא יודע. בוא נחשוב מה היא עושה, ואז נראה
איך זה נראה בקוד:
הפונקציה מקבלת מערך (או קבוצה), ומטרתה למצוא את כל תת-המערכים שלו בגודל N. איך
עושים את זה? מתחילים מהמספר הראשון, בוחרים מספר, ועוד מספר, ועוד מספר (לא כולל
אלו שכבר נבחרו), עד עד שנבחרו N מספרים. זו אפשרות אחרת.
לאחר מכן מנסים לבחור מספר אחר בתור המספר האחרון (ה-N-י), וכך יוצרים עוד אפשרויות.
ברגע שנגמרו האפשרויות עבור המספר ה-N-י, מנסים לבחור מספר אחר בתור המספר ה-(N-1)-י,
וכך הלאה.
אם במקרה זה נשמע לך כמו הסבר לנוסחות קומבינטוריות בסיסיות, אתה בכיוון הנכון. אם
במקרה זה נשמע לך זועק "רקורסיה", אתה בכיוון הנכון.
כדי לבחור סדרת מספרים, אתה בוחר מספר ראשון, K, ומצרף אליו את הסדרה הקטנה ב-1
באורכה שנוצרת מאותו מערך, ללא האיבר שכבר נבחר.
(אולי תרצה להשתמש במחסנית של ממש במקום ברקורסיה, אבל אתה יכול בהתחלה לכתוב
את הקוד באופן רקורסיבי, מה שיהיה פשוט יותר כנראה, ואז כשיהיה לך משהו עובד מול
העיניים להסיר את הרקורסיה)