מבני נתוניםרקורסיהאלגוריתמים רקורסיביים
שאלה מתוך המבחן הרשמי · מבחן 2024 · קיץ מועד א · שאלה 6

נתונות שתי פעולות רקורסיביות הפועלות על שרשרת חוליות (linked list) מטיפוס Node<Integer>: הפעולה what מקבלת שרשרת lst ומספר שלם x; הפעולה guess מקבלת שרשרת lst בלבד וקוראת בתוכה ל-what. בכל סעיפי השאלה יש לעקוב אחר ריצת הפעולה הנתונה, ולענות על שלוש שאלות: מה השרשרת המתקבלת / מה מדפיסה הפעולה, מה עושה הפעולה (בלשון כללית), ומה סיבוכיות הזמן שלה.

public static Node<int> What (Node<int> lst, int x)
{
    if (lst == null)
        return null;
    Node<int> temp = What (lst.GetNext(),x);
    if (lst.GetValue() == x)
        return temp;
    lst.SetNext (temp);
    return lst;
}

public static void Guess (Node<int> lst)
{
    if (lst != null) {
        Node<int> 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? נמקו את תשובתכם.

שאלות ותגובות על השאלה

🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות

שאלו כאן — ותקבלו מענה מוסמך.

🎓 מרצה לתכנות עונה כאן — תקבלו מענה מקצועי