Main Thread
can we change "lcs_len_v1", or only the inner recursive function?
בסעיף א' אתם נדרשים לממש פונקציה רקורסיבית lcs_len_rec שהקריאה הראשונה לה נעשית מתוך פונקציית מעטפה lcs_len_v1. בהגדרת הפונקציה הרקורסיבית ניתנו 4 פרמטרים: רשימה, מספר, רשימה, מספר. שמות שני הפרמטרים המספריים הוא size_s, size_t . הכוונה היתה לרמוז לכם על פתרון רקורסיבי אפשרי אשר מעדכן בכל קריאה חדשה לפונקציה הרקורסיבית את ערכיהם של חלק מהפרמטרים.
בקריאה הראשונה לפונקציה הרקורסיבית מפונקציית המעטפת מועברים ערכי n,m ל size_s,size_t בהתאמה.
ייתכן שחלקכם חשבתם על פתרון רקורסיבי שונה מעט שלא מסתדר עם הפרטמרים הנוכחיים שמועברים לפונקציה.
במקרה כזה, על מנת לאפשר לכם גמישות מסויימת בפתרון, תוכלו לשנות את שמות הפרטמרים המספריים בלבד בהגדרת הפונקציה lcs_len_rec כך שעדיין יהיו פרמטרים מספריים אבל בעלי משמעות שונה. אין לשנות או להוסיף פרטמרים נוספים. בנוסף תוכלו לשנות את הערכים המועברים בקריאה הראשונה לפונקציה הרקורסיבית מתוך פונקציית המעטפה lcs_len_v1.
ההנחיה רלוונטית גם עבור סעיף ב' בו מועבר פרמטר חמישי (dictionary) שגם אותו כמובן אסור לשנות.
can I write lcs_len_rec() in a way that it gets only to vars,s and t (without len(s),len(t))?
could it be that you intend to use slicing?
Remember this may have bad effects on complexity…
In general - yes.
In this specific case- we would like you to avoid using slicing (how does this affect the time complexity?).
suppose we have a recursive function, f, that returns 0*f()… Does it return immediately 0 or does it continue in the recursive function and finally returns 0?
Try to run this code in order to understand what happens:
def rec():
print("6")
return 0*rec()
rec()
האם ניתן להוסיף קוד רק בתוך הלולאה או שאפשר גם אחריה
for i in range(len(s)): m[i,0] =0
for j in range(len(t)): m[0,j] =0
לא אמורים לרדת שורה אחרי הנקודותיים?
זה לא אמור להיות אורך ועוד 1 כדי שימלא את כל השורה?
השורות בכל מקרה אפס מתוך הגדרה אז למה לעשות את הפעולה הזאת בכלל?
לא חייבים לרדת שורה. מקובל לפעמים לוותר על ירידת שורה אם הפקודה היא מאוד קצרה.
המטריצה באמת מתמלאת באפסים כברירת מחדל, כך ששורות אלו הן רק "למען הסדר הטוב" (מחר בבוקר מישהו ישנה את ברירת המחדל ל- 17.5…)
Would you like us to avoid using slicing also in 5.b?
There is a simple solution without slicing and in general slicing adds an overhead that you may want to avoid. The parameters given in (a) and (b) allows you to avoid slicing.
However, in this question you will not lose points for using slicing