אתם מתרגלים שאלה מתוך מה"ט מבני נתונים ותכנות מונחה עצמים — הנדסאי תוכנהמבחן 2025 · קיץ מועד א · שאלה 5כל שאלות המבחן ←
רקורסיהאלגוריתמים רקורסיביים

נתונה הפעולה What המקבלת שני מספרים שלמים n<k. הפעולה משתמשת בפעולה GetLast.

language_variants: whatCode:

public static Node<Integer> what (int n, int k){
    if (n == k)
        return new Node<Integer>(n);
    else
    {
        if (k % 2 == 0)
            return new Node<Integer>(k, what(n, k+1));
        else
        {
            Node<Integer> p = new Node<Integer>(k);
            Node<Integer> chain = what (n, k+1);
            Node<Integer> last = getLast (chain);
            last.setNext (p);
            return chain;
        }
    }
}

secretCode:

public static Node<Integer> secret (int n, int k) {
    if (n == k)
        return new Node<Integer>(n);
    else
    {
        if (n % 2 == 0)
            return new Node<Integer>(n, secret(n-1, k));
        else
        {
            Node<Integer> chain = secret (n-1, k);
            getLast (chain).setNext (new Node<Integer>(n));
            return chain;
        }
    }
}
סעיף א

public static Node<Integer> getLast(Node<Integer> list)

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

סעיף ב

עקבו אחרי זימון הפעולה What(10,5) ורשמו מה תחזיר הפעולה. יש להראות את תוכן השרשרת בחזרה מכל קריאה רקורסיבית.

סעיף ג

מה תהיה תוצאת הזימון Secret(6, 2)?

סעיף ד

האם קיימים שני מספרים שלמים וחיוביים n>k כך שתוצאות הזימונים Secret(n, k)-ו What(n, k) יהיו זהות? אם כן – תנו דוגמה לזוג מספרים שכזה, ואם לא – הסבירו למה הדבר אינו אפשרי.

סעיף ה

public static Node<Integer> whatIterative(int n, int k)

כתבו את הפעולה What בצורה הלא רקורסיבית.

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

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

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

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