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

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

language_variants: whatCode:

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

secretCode:

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

public static Node<int> GetLast(Node<int> list)

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

סעיף ב

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

סעיף ג

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

סעיף ד

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

סעיף ה

public static Node<int> WhatIterative(int n, int k)

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

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

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

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

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