Post here clarifications about q 2
האם מותר להוסיף רשימה גלובלית שאותה נחזיר בסוף התהליך? אחרת איך ניתן להגדיר רשימה כך שהרקורסיה לא תגדיר אותה בכל פעם מחדש? תודה!
As always, using global variables are highly discouraged.
Try to sort this out without them (you'll also gain a better understanding of recursion).
האם מותר להשתמש בלולאות וב-slicing במימושי הפונקציות? (כמובן שהמימוש כולו עדיין כולל קריאות רקורסיביות. השימוש ב-slicing ו/או לולאות רק כדיי להקטין את גודל הבעיה לקריאה הבאה)
Unless the question forbids it, directly or indirectly, you may use slicing.
does that imply that loops are also ok? (assuming my solution remains recursive)
The same holds for loops. You may use loops as long as your solution follows the requirements specified in the question.
האם ניתן להיעזר בפונקציה מעטפת לפונקציה הרקרוסיבית.
תודה.
You may, although it is not necessary here (make sure your code does not become too cumbersome).
In Question 2 first section, we are asked to fill the blanks, are we allowed to add more lines? other than filling the blanks?
No, there is no need to add more lines.
on part 1 of the question - what should be the correct result for running the flatten function on the list [[[1],[2,[1,3,4,5,[]]]]] - this: [1, 2, 1, 3, 4, 5] or [1, 2, 1, 3, 4, 5,[]]?
אני מבין מאיפה השאלה שלך מגיעה,
היא נובעת מכך שבדוגמא בPDF ראינו שאם הפרמטר הוא [] אז מוחזר [] ואם הפרמטר הוא רשימה של רשימות (+nesting..) של מספרים, אז תוחזר רשימה של מספרים.
אבל אם תשים לב למה שכתוב בPDF:
"…מחזירה רשימה שמכילה את כל המספרים השלמים שהופיעו במבנה לפי סדר הופעתם…"
כתוב שהפונקציה מחזירה רשימה (וזו הסיבה ש[] מחזיר [], ולא סיבה אחרת),
כלומר איך שלא מסתכלים על זה הפלט שיחזור צריך להיות
רשימה, ובגלל זה בהנתן הפרמטר [], הפלט היה גם כן [], כלומר - רשימה שמכילה את כל המספרים השלמים,
ובמקרה של [] מדובר בהחזרה של רשימה ריקה, ולא בהחזרה של בדיוק אותו קלט שהתקבל [].
לדעתי במקרה של מה ששאלת, הפלט צריך להיות:
[1, 2, 1, 3, 4, 5]
Correct.