שאלה מתוך המבחן הרשמי · מבחן 2024 · קיץ מועד א · שאלה 6
נתונות שתי פעולות רקורסיביות הפועלות על שרשרת חוליות (linked list) מטיפוס Node Integer : הפעולה what מקבלת שרשרת lst ומספר שלם x; הפעולה guess מקבלת שרשרת lst בלבד וקוראת בתוכה ל-what. בכל סעיפי השאלה יש לעקוב אחר ריצת הפעולה הנתונה, ולענות על שלוש שאלות: מה השרשרת המתקבלת / מה מדפיסה הפעולה, מה עושה הפעולה (בלשון כללית), ומה סיבוכיות הזמן שלה.
public static Node<Integer> what (Node<Integer> lst, int x)
{
if (lst == null)
return null;
Node<Integer> temp = what (lst.getNext(),x);
if (lst.getValue() == x)
return temp;
lst.setNext (temp);
return lst;
}
public static void guess (Node<Integer> lst)
{
if (lst != null) {
Node<Integer> temp = what (lst.getNext(), lst.getValue());
lst.setNext (temp);
guess (lst.getNext());
}
}
שרשרת החוליות lst הנתונה, מטיפוס Node<Integer>, המשמשת בשני סעיפי השאלה.
lst -> [1] -> [3] -> [5] -> [3] -> [1] -> [9] -> [4] -> null
סעיף א
עקבו אחר הפעולה what (lst, 1), והציגו את השרשרת שהפעולה מחזירה.
סעיף ב
מה עושה הפעולה what? הסבירו את תשובתכם.
סעיף ג
מהי סיבוכיות הפעולה what? נמקו את תשובתכם.
סעיף ד
עקבו אחר הפעולה guess (lst), והציגו את השרשרת lst בסיום הפעולה. בסעיף זה אין צורך לעקוב אחר הפעולה what.
סעיף ה
מה עושה הפעולה guess? הסבירו את תשובתכם.
סעיף ו
מהי סיבוכיות הפעולה guess? נמקו את תשובתכם.
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.