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