[אתגר] מקסימום רקורסיבי

תגיות:

האמת שאני בדיוק מחפש פתרון בלי לשנות אותה, תודה :slight_smile:

לייק 1

הצלחתי, קצת לא אלגנטי אנסה לשפר

def maximum(num_list):
if len(num_list) == 1:
    return num_list[0]
if num_list[-1] < num_list[-2]:
    return maximum(num_list[:-1])
else:
    return maximum(num_list[:-2] + [num_list[-1]])
def maximum(num_list):
    if type(num_list) != list or len(num_list) == 0:
        return print("This function expects a list of numbers")
    new_num_list = num_list.copy()
    if len(new_num_list) > 1:
        if new_num_list[0] > new_num_list[1]:
            new_num_list.pop(1)
        else:
            new_num_list.pop(0)
        return maximum(new_num_list)
    else:
        return new_num_list[0]

מה באמת אמורה לעשות הבדיקה? @Yam

כלום אם היא מצליחה :slight_smile:
שים לב שאתה משנה הרשימה המקורית שהועברה לפונקציה

אם הוא יוצר עותק הוא לא משנה אותה לא?

צודק, לא שמתי לב לעותק :slight_smile:
עדיין ישנם פתרונות אלגנטיים יותר (כי כרגע מתבצעת שם העתקה של המון תתי רשימות)

זה הקוד שלי:

def maximum(l):
    max_num = l[0]
    if len(l) > 1:
        if l[1] > max_num:
            max_num = maximum(l[1:])
        else:
            l.remove(l[1])
            max_num = maximum(l)
    return max_num

עבד לי עם הרשימות שלי, לא הצלחתי להריץ עם הבדיקה שלך…

לייק 1

עכשיו ללבל הבא: בלי copy :slight_smile:


ככה? :slight_smile:

:fire: :slightly_smiling_face:

def maximum(lst):
i = len(lst) -1
if i == 0:
return lst[i]
res = lst.copy()
res.pop()
res = maximum(res)
#another option is - return max(res,lst[i])
if res > lst[i]:
return res
else:
return lst[i]

image
עם הזחות

אהלן ים, כתוב להשתמש אך ורק בחומר שלמדנו כבר. רקורסיה לא נופלת תחת חומר שלא למדנו?

לא.

לייק 1

למה בלי copy? מה הבעיה?

הפתרון שלי. אשמח להערות מכל בחינה (יעילות, רווחים, צורת כתיבה וכו׳)

הערה: השתמשתי במילים “l” ו-“m” במקום “num_list” ו-״maximum” בהתאמה מכיוון שהקוד נכתב באפליקציה באייפון וניסיתי שכל שורת קוד לא תצטרך לחרוג לשורה הבאה.

לייק 1

היי @orpazf ,
אפשר הסבר מה קורה בחלק האחרון של הפונקציה, ניסיתי להריץ אותה
בvisualize python ובמחברת.
אני מקבל שגיאה שיש חריגה בגודל הרקורסיה

על איזה גודל ניסית להריץ אותה? לרוב מחסנית הקריאות לפונקציה מוגבלת וניתן להגיע לכל היותר ל-999 קריאות רקורסיביות לפני שנזרקת שגיאה

לייק 1

בהתחלה,
[0, 1, 15, 3, 18, 5, 6, 14, 8, 1012, 9, 7, 4, 2, 20]
אחרי השגיאה
[0, 1, 15]