PracticU

הסבר כללי על רקורסיה בג'אווה

בלי כתוביותעם כתוביות
PracticU › קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים › הסבר כללי על רקורסיה בג'אווה
הסבר כללי על רקורסיה בג'אווה

בשיעור זה נכנסים לאחד הנושאים המורכבים אך המעניינים ביותר בתחום המבוא לתכנות ואלגוריתמיקה, רקורסיה, מבינים מה קורה בזיכרון כשפונקציה קוראת לעצמה, ולומדים את ארבעת השלבים לכתיבתה.
נושאי הסיכום המוצגים בשיעור:
1. מה זו רקורסיה: רקורסיה זה פשוט פונקציה שקוראת לעצמה, והקריאה הרקורסיבית, זה בדיוק הקריאה שבה הפונקציה קוראת לעצמה, היא לא גורמת לפונקציה לקפוץ לתחילת התוכנית כמו שחושבים בהתחלה, אלא גורמת למערכת לפתוח מופע חדש לגמרי של הפונקציה.
2. מה עושה הפונקציה הקוראת: הפונקציה הקוראת, זו שבתוכה הייתה את הקריאה, ממתינה עד שהמופע החדש יסתיים לגמרי.
3. מופע חדש מאפס: המופע החדש של הפונקציה מתחיל מחדש, מאפס, כל המשתנים המקומיים נוצרים מחדש לגמרי ללא קשר למופע הקודם, אפילו שזאת אותה הפונקציה בדיוק.
4. החזרה לנקודת ההמשך: כאשר המופע החדש שקראנו מסתיים, הפונקציה נסגרת, המופע החדש נסגר, ואנחנו ממשיכים מאותו המקום שעזבנו במופע הקודם של הפונקציה, כלומר בדיוק אחרי הקריאה לפונקציה.
5. שלב ראשון, החתימה: כאשר כותבים רקורסיה יש ארבעה צעדים שצריכים לבצע ולהביא לתשומת הלב ולהתחשב בהם, צעד ראשון הוא החתימה של הפונקציה, שהיא בעצם הכותרת שלה, זה השם, הארגונטים שהיא מקבלת והערך המוחזר, והחתימה של הפונקציה ברוב הגדול של המקרים תהיה בדיוק כמו חתימה של פונקציה רגילה שאינה רקורסיבית, בונים את החתימה לפי מה שהפונקציה אמורה לקבל ולפי מה שהיא אמורה להחזיר, וגם אם עושים את הפונקציה הזאת רקורסיבית מאיזושהי סיבה משאירים את אותה חתימה בדיוק, וזה שהיא רקורסיבית זה פחות משנה.
6. שלב שני, תנאי יציאה: תנאי יציאה מהפונקציה הוא משהו שחייב להיות בפונקציה, אם לא יהיה תנאי יציאה אז הפונקציה לנצח תקרא לעצמה ותקרא לעצמה שוב ושוב ובסופו של דבר לתוכנית לא יהיה יותר מקום למשתנים המקומיים שכל הזמן נוצרים ולכתובת של הפונקציה שכל הזמן נוצרת בזיכרון שוב ושוב, ומהר מאוד התוכנית תקרוס, וסוג הקריסה הזאת נקרא גלישת מחסנית, וכנראה שזה בעצם המקור של השם של האתר הידוע למתכנתים, ולכן חייב להיות לנו איזה תנאי יציאה כזה מהפונקציה, שאם הוא מתקיים אז יוצאים מיד מהפונקציה ולא ממשיכים לבצע שוב ושוב את הקריאות הרקורסיביות לפונקציה עצמה.
7. שלב שלישי, שלב אחד מהמטלה: צריך להסתכל על כל המטלה שעלינו לבצע בפונקציה, אבל בשלב הזה מבצעים רק שלב אחד ויחיד מכלל המטלה, אם לדוגמה צריך להציג על המסך מספר כוכביות, אז בשלב השלישי מסתכלים על כל המטלה של הביצוע, וזה להציג את כולן, ואז צריכים להבין מהו שלב אחד ויחיד של המטלה הזאת, שלב אחד ויחיד יהיה להציג כוכבית אחת, וכך בשלב השלישי לא מציגים את כולן אלא מציגים כוכבית אחת.
8. שלב רביעי, הקריאה הרקורסיבית לשאר: השלב האחרון הוא בעצם הביצוע של שאר השלבים שיש לנו לבצע, אם היה עלינו להציג מספר כוכביות על המסך וזה מה שהפונקציה צריכה לעשות, ובשלב השלישי הצגנו כוכבית אחת, בשלב הרביעי צריך להציג את שאר הכוכביות, ומה עושים, מבצעים כאן את הקריאה הרקורסיבית ושולחים לה את שאר המטלה לביצוע, כלומר אם צריך להדפיס מספר כוכביות והדפסנו כבר כוכבית אחת, מבצעים פה את הקריאה הרקורסיבית, קוראים לעצמי שוב, אבל שולחים את המספר פחות אחד, כלומר כל המטלה הייתה המספר המלא, אחת הדפסנו, נשאר לנו אחד פחות, ושולחים את זה לקריאה הרקורסיבית בשביל שהיא תבצע את שאר המטלה.
9. ההנחה המקובלת: שימו לב, עושים את זה אפילו שהפונקציה עדיין לא גמורה, הרי בונים אותה כעת, נכון, ואם בונים אותה היא לא גמורה, איך אפשר לסמוך שהיא באמת עושה את העבודה שלה כמו שצריך, ואם כתבנו את הכל כמו שצריך והולכים לעשות את ארבעת השלבים, אנחנו צריכים להניח שהיא אכן פועלת ועובדת כמו שצריך, ובואו נצלול לתוך הקוד ונראה איך מיישמים את ארבעת השלבים האלה בבניית פונקציה רקורסיבית.
סיכום:
בשיעור זה הוסבר מהי רקורסיה, פונקציה שקוראת לעצמה במופע חדש ומנותק לחלוטין בזיכרון, מה קורה כשהמופע מסתיים ולאן חוזרת השליטה, ולמדנו את ארבעת השלבים לכתיבת פונקציה רקורסיבית, חתימה רגילה, תנאי יציאה שמונע גלישת מחסנית, ביצוע שלב אחד מהמטלה, וקריאה רקורסיבית שמעבירה את שאר המטלה הלאה, ובשיעור הבא נכתוב רקורסיה בפועל.
בשיעור הבא נעסוק בנושא Writing Recursion.
SR11178HE

פרקי ההרצאה: הסבר כללי על רקורסיה בג'אווה

  1. 00:00

    מהי רקורסיה - פונקציה שקוראת לעצמה

  2. 00:46

    מופע חדש של הפונקציה והמשך ביצוע

  3. 01:39

    ארבעת השלבים לכתיבת פונקציה רקורסיבית

  4. 02:33

    תנאי יציאה ומניעת Stack Overflow

  5. 03:10

    השלב השלישי: ביצוע חלק אחד מהמטלה

תמלול ההרצאה: הסבר כללי על רקורסיה בג'אווה

הטקסט המלא של הדקות הראשונות בהרצאה «הסבר כללי על רקורסיה בג'אווה» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    אנחנו מגיעים לאחד הנושאים המורכבים ביותר אבל המעניינים שקיימים בתחום המבוא לתכנות ואלגוריתמיקה. והנושא הזה נקרא רקורסיה. דבר ראשון, בואו נבין מה זה רקורסיה.

  2. 00:22

    רקורסיה זה פשוט פונקציה שקורית לעצמה. הקריאה הרקורסיבית, זה בדיוק הקריאה שבה הפונקציה קורית לעצמה, גורמת לפונקציה לקפוץ לתחילת התוכנית כמו שחושבים בהתחלה, אלא גורמת למערכת לפתוח מופע חדש לגמרי של הפונקציה.

  3. 00:46

    הפונקציה הכורת, The calling function, זאת שבתוכה הייתה את הקריאה, ממתינה עד שהמופע החדש יסתיים לגמרי. המופע החדש של הפונקציה מתחיל מחדש, מאפס, כל המשתנים הלוקאליים שנוצרים מחדש לגמרי ללא קשר למופע הקודם, אפילו שזאת אותה הפונקציה בדיוק.

  4. 01:13

    כאשר המופע החדש שקראנו מסתיים, הפונקציה נסגרת, המופע החדש נסגר, ואנחנו ממשיכים מאותו המקום שעזבנו במופע הקודם של הפונקציה, כלומר בדיוק אחרי הקריאה לפונקציה.

  5. 01:30

    איך נכון לכתוב רקורסיה? כאשר אנחנו כותבים רקורסיה, יש ארבעה צעדים שאנחנו צריכים לבצע ולהביא לתשומת הלב ולהתחשב בהם כאשר אנחנו כותבים רקורסיביה.

  6. 01:43

    צעד ראשון, החתימה של הפונקציה. החתימה של הפונקציה זה בעצם הכותרת שלה, זה השם, זה הארגומנטים שהיא מקבלת וזה הערך המוחזר. החתימה של הפונקציה ברוב הגדול של המקרים יהיה בדיוק כמו חתימה של פונקציה רגילה שאינה רקורסיבית.

  7. 02:04

    אני רוצה כרגע לבנות איזו פונקציה והיא לא אמורה להיות רקורסיבית, אני בעצם בונה את החתימה לפי מה שהפונקציה אמורה לקבל ולפי מה שהיא אמורה להחזיר. גם אם אני עושה את הפונקציה הזאת רקורסיבית מאיזושהי סיבה, אז אני משאיר את אותה החתימה בדיוק.

  8. 02:20

    ברוב רוב המקרים אני בעצם לוקח את אותה חתימה, מה היא אמורה לקבל, מה היא אמורה להחזיר. זה שהיא רקורסיבית זה פחות משנה לי. תנאי יציאה.

  9. 02:31

    תנאי יציאה מהפונקציה זה משהו שחייב להיות בפונקציה, אם לא יהיה תנאי יציאה אז הפונקציה לנצח תקרע לעצמה ותקרע לעצמה ותקרע לעצמה שוב ושוב ושוב ובסופו של דבר התוכנית לא יהיה לה יותר מקום למשתנים הלוקאליים שכל הזמן נוצרים ולכתובת של הפונקציה שכל הזמן נוצרת בזיכרון שוב ושוב ושוב ושוב

  10. 02:54

    ומהר מאוד התוכנית תקרוס. סוג של הכריסה הזאת נקרא Stack Overflow Exception. כנראה שזה בעצם המקור של השם של האתר הידוע Stack Overflow.

  11. 03:08

    לכן חייב להיות לנו איזה תנאי יציאה כזה מהפונקציה, שאם הוא מתקיים אז אנחנו יוצאים מיידית מהפונקציה ולא ממשיכים לבצע שוב ושוב את הקריאות הרקורסיביות לפונקציה עצמה.

  12. 03:23

    הצעד השלישי, ואנחנו צריכים להסתכל על כל המטלה שעלינו לבצע בפונקציה,

ההרצאה הקודמת: תרגול על Java API

ההרצאה הבאה: Writing Recursion

הרצאות קשורות מקורסים אחרים

  • רקורסיה - Recursion
  • הסבר כללי על קורסי תכנות
  • הסבר כללי על Delegate Event
  • הסבר כללי על Google Cloud

קורסים נוספים במסלול

  • קורס מבוא ל-QA - מידע חשוב לבודק תוכנה
  • קורס פוסטמן - Postman - בדיקות לאתרי אינטרנט - API
  • קורס Robot Framework - בדיקות QA ממשק גרפי
  • קורס סלניום בסיסי - בדיקות אוטומטיות - Selenium
  • קורס סלניום מתקדם - CI/CD - Continues Integration
  • קורס מייבן - Maven