מבני נתוניםרקורסיהאלגוריתמים רקורסיביים
שאלה מתוך המבחן הרשמי · מבחן 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? נמקו את תשובתכם.

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

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

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

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