נתונה הפעולה What המקבלת שני מספרים שלמים n<k. הפעולה משתמשת בפעולה GetLast.
נתונה הפעולה 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 בצורה הלא רקורסיבית.
שאלות ותגובות על השאלה
🎓 לא הבנתם משהו? קבלו הסבר נוסף ממרצה לתכנות
שאלו כאן — ותקבלו מענה מוסמך.