מילון מושגים:
רקורסיה - טכניקה שבה פונקציה קוראת לעצמה כדי לפתור בעיה על ידי פירוקה למקרים קטנים יותר.
זיכרון - רכיב מהיר ונדיף שבו המחשב שומר נתונים ותוכניות בזמן ריצתם. תוכנו נמחק עם כיבוי המחשב.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
תנאי - ביטוי לוגי בקוד שתוצאתו אמת או שקר, וקובע אילו פקודות יתבצעו בהתאם לערכו.
משתנה - שם שמפנה למקום בזיכרון שבו נשמר ערך שיכול להשתנות במהלך ריצת התוכנית, כמו מספר, טקסט או אובייקט.
Recursion Diagram
בשיעור זה רוצים לראות משהו שקשור לזיכרון ולפעילות הפנימית של הרקורסיה, זה בעצם דיאגרמת הרקורסיה, והולכים לראות פה דיאגרמה של מה בעצם התרחש כאשר קוראים לרקורסיה שוב ושוב, ובואו נראה.
נושאי הסיכום המוצגים בשיעור:
1. נקודת הפתיחה של הדיאגרמה: נניח שיש לנו פה את הפונקציה הראשית ואנחנו רוצים להסתכל על פונקציית הצגת הכוכביות שכתבנו ולשלוח לה את המספר שלוש, ויש לנו פה קריאה לפונקציה הזאת, וכאן נפתח מופע ראשון של הפונקציה כשהמספר שווה שלוש בפונקציית ההצגה.
2. המופע הראשון: מה שרואים הוא שיש לנו כאן את תנאי היציאה, והתנאי היציאה הזה לא מתקיים כרגע כי המספר בעצם לא שווה לאפס, ולכן התוכנית ממשיכה ומדפיסה לנו כוכבית ראשונה על המסך, ולאחר מכן מבצעת קריאה רקורסיבית ושולחת את המספר פחות אחד, ובואו נראה מה קורה בקריאה הרקורסיבית.
3. הקריאה הרקורסיבית כמופע חדש: מה שקורה בקריאה הרקורסיבית זה קריאה לכאילו פונקציה חדשה לגמרי עם מופע חדש שבו כל המשתנים נפתחים מההתחלה, ואין פה קפיצה לכאן להתחלה של הפונקציה, אלא יש פה פתיחה חדשה לגמרי, וכאן המספר שווה שניים, וכאשר המופע הזה של הפונקציה עכשיו הוא ממתין בזיכרון עד שהמופע הזה ייסגר, ואנחנו מתחילים מופע חדש.
4. המופע השני והשלישי: פונקציית ההצגה נפתחת כשהמספר שווה שניים, ושניים לא שווה לאפס, והנה כוכבית שנייה שמדפיסים ושוב פעם קוראים רקורסיבית לפונקציה ושולחים שניים פחות אחת זה אחד, ובואו נבצע את הקריאה הבאה ונפתח מופע חדש, ושימו לב עכשיו ששני המופעים האלה ממתינים, כמובן שהמיין פה גם כן ממתין כי הוא עדיין ממתין לסיום הפונקציה הראשונה שנקראה, ואנחנו מפעילים עכשיו מופע חדש כשהמספר שווה אחד, ומספר שווה אחד זאת אומרת שהוא לא אפס וממשיכים, מציגים על המסך עוד כוכבית, וזה כוכבית מספר שלוש שמוצגת למסך, ושימו לב, רצינו להדפיס שלוש כוכביות, זאת הכוכבית האחרונה.
5. המופע הרביעי שבו מתקיים תנאי היציאה: ושוב פעם קוראים לפונקציה, שולחים את המספר פחות אחד, ובואו ניכנס שוב פעם לפונקציה, ויש לנו מופע רביעי שנפתח, אבל הפעם המספר ששלחנו הוא אפס, אחד פחות אחד זה אפס, ואנחנו מקבלים פה אפס, וכאן תנאי היציאה מתבצע, המספר שווה אפס, התשובה אמת, ואנחנו נכנסים לפעולת החזרה ואנחנו לא ממשיכים.
6. סגירת המופעים בסדר הפוך: בואו נסתכל מה יקרה עכשיו, המערכת מהפעולה של החזרה חוזרת למופע הזה והמופע הרביעי נסגר לגמרי, ובואו נראה מה קורה הלאה, המופע השלישי נסגר אחרי שהוא כבר עשה את העבודה שלו והדפיס את הכוכבית שלו, המופע השני נסגר עכשיו ולבסוף המופע הראשון נסגר, ואנחנו חוזרים בחזרה לפונקציה הראשית.
7. המסקנה מהדיאגרמה: כל הרקורסיה נפתחה ארבע פעמים, נסגרה, כאשר תוך כדי זה היא הציגה שלוש כוכביות על המסך.
סיכום:
בשיעור זה ראינו בדיאגרמה מה קורה בזיכרון ברקורסיה, כל קריאה רקורסיבית פותחת מופע חדש ונפרד של הפונקציה עם משתנים משלו בזמן שהמופעים הקודמים ממתינים, עד שמגיעים למופע שבו מתקיים תנאי היציאה ואז המופעים נסגרים אחד אחר השני בסדר הפוך והשליטה חוזרת לפונקציה הראשית, וכך הבנו מדוע רקורסיה צורכת זיכרון לכל מופע פתוח, ובשיעור הבא נתרגל רקורסיה בג'אווה.
בשיעור הבא נעסוק בנושא תרגול רקורסיה בג'אווה.
SR11180HE