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