דלג לתוכן הראשי
8200 University Pro

מבחן להב - רמה קשה

בחרו סט תרגול

📋רמה קשה - רקורסיה, מערכים דו-ממדיים ותרחישים

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

מה מתאמנים כאן

  • רקורסיה: לרשום כל קריאה כשורה משלה, לרדת עד תנאי העצירה, ואז לחזור למעלה ולחשב את ערכי ההחזרה מהסוף להתחלה.
  • מערכים דו-ממדיים: grid[r][c] הוא שורה r ועמודה c. לולאה חיצונית על השורות, פנימית על העמודות.
  • מכונות מצבים: משתנה אחד (state) שמשתנה לפי כל תו בקלט. טבלה עם עמודות תו, מצב לפני, מצב אחרי.
  • קריאות חוזרות: כשפונקציה נקראת עם כמה קלטים, פתרו רק את הקלט שנשאל עליו. השאר הם הסחה.

דוגמה - מעקב אחרי רקורסיה:

static int f(int n) {
    if (n <= 1) return 1;
    return n + f(n - 2);
}
System.out.println(f(7));
קריאהמה קורהערך החזרה
f(1)תנאי עצירה1
f(3)3 + f(1)4
f(5)5 + f(3)9
f(7)7 + f(5)16

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

אסטרטגיה לרמה זו

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

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