פורסם ב זה רק קוד, מתכוננות לראיונות

רקורסיה – הקדמה

זמן קריאה: 4 דקות

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

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

אישית, אני חושבת שזה הפסד גדול, מכמה סיבות – 

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

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

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

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

אה, זה ממש פשוט?
אז עכשיו הבנתי, תודה באמת.

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

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

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


מה יהיה בסדרה?

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

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

מוכנות? הנה הפוסטים שהתפרסמו בינתיים בסדרה

4 תגובות בנושא “רקורסיה – הקדמה

השאר תגובה