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

סעיף א

נתונה הפעולה הרקורסיבית what המקבלת מערך מספרים שלמים הממוין בסדר עולה ומספר שלם וחיובי num:

public static boolean what(int[] arr, int num)
{
    return what(arr, num, 0,arr.length-1, false);
}
public static boolean what(int[] arr, int num, int i, int k, boolean f)
{
    if(i >= k) return f;
    if(arr[i] + arr[k] < num)
        return what(arr, num, i+1,k,f);
    if(arr[i] + arr[k] > num)
        return what(arr, num, i,k-1,f);
    System.out.println(arr[i]+ " " + arr[k]);
    return what(arr, num, i+1, k-1, true);
}

נתון המערך הבא של מספרים שלמים: int[] a={2,4,7,13,18,21,30}; עקבו אחרי זימון what(a, 20). רשמו את תוצאת הזימון. יש להראות מעקב!

סעיף ב

מה מבצעת הפעולה what באופן כללי?

סעיף ג

נתונה הפעולה הרקורסיבית why המקבלת מערך מספרים שלמים הממוין בסדר עולה ומספר שלם וחיובי num:

public static int why(int[] arr, int num)
{
    return why(arr, num, 0,1, 0);
}
public static int why(int[] arr, int num, int i, int k, int f)
{
    if(i == arr.length-1)return f;
    if(k == arr.length)return f;
    if(arr[k] - arr[i] < num)
        return why(arr, num, i, k+1, f);
    if(arr[k] - arr[i] > num)
        return why(arr, num, i+1, k, f);
    System.out.println(arr[i]+" " + arr[k]);
    return why(arr, num, i+1,k+1, f+1);
}

נתון המערך הבא של מספרים שלמים: int[] a={2,4,7,13,18,21,30}; האם קיים מספר num שעבורו זימון why(a, num) יחזיר 2? אן כן, תנו דוגמה למספר כזה וציינו מה יהיה הפלט, ולא – הסבירו למה הדבר לא אפשרי.

סעיף ד

מה מבצעת הפעולה why באופן כללי?

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

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

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

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