16 תשובות
void זה לא בעיה, זה פשוט אומר שהפעולה תדפיס ולא תחזיר
לגבי השאר לא אשקר אין לי כוח לחשוב, סליחה
שואל השאלה:
אבל כל הקטע של רקורסיה זה שהיא מחזירה ערך לא?
אנונימית
לא זה לא הקטע בהכרח, יש המון פעולות רקורסיביות שלא מחזירות ערך..
נגיד בהרבה מיונים רקורסיבים יש לך פעולה שהיא void שמטרתה היא פשוט להקטין את הבעיה כל פעם, ולתת לפונקציה אחרת לעשות את העבודה.
את צריכה עזרה בתרגיל?
שואל השאלה:
כןן
אין לי מושג איך לעשות אותוו
אנונימית
את האמת שאלה מעניינת... הם מבקשים קודם להדפיס את כל הa ואז את הb?
שואל השאלה:
כן
זה משנה הסדר?
אנונימית
כאילו מה להדפיס קודם? לא ממש.
אבל נראלי שזה די בלתי אפשר להדפיס קודם את כל הa, ואז את כל הb..
הצלחתי לחשוב איך אפשר להדפיס אותם לסירוגין (כאילו, ababab).
אבל אנסה לחשוב עוד חחח
אהה נראלי שהבנתי.. וואו זה באמת תרגיל קשוח (אין לי מחשב באזור, אז לא בטוחה אם הקוד יעבוד בדיוק)
זה העקרון בערך:
יש לך פעולה רקורסיבית שמקבלת מספר כלשהו, תנאי עצירה n=0 (במקרה כזה פשוט עושים return).

מתחת לתנאי העצירה את ישר מדפיסה את התו a.
ופה מגיע החלק המעניין, קריאה רקורסיבית.
את קוראת לפעולה, הפעם עם n-1.
ואז בעצם יוצא מצב שהדפסת את כל תוי הa הדרושים לך.
הגענו לתנאי העצירה (n=0), ואז התנאי הזה אומר לנו, תחזרו לאן שקראתם לי!
וזה בהכרח כאשר n=1 ( כי כל פעם מקטינים את הבעיה באחד).
ואז אחרי הקריאה הרקורסיבית, את מדפיסה את התו b.
ואז יוצא מצב שאת חוזרת אחורה ברקורסיה ומדפיסה כל פעם את התו הזה (כך בעצם הn גדל).

זה יראה ככה בערך:
print(int n)
console.write(a)
print(n-1)
console.write(b)

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

print(int n)

if(n==0)
return;

console.write(a)
print(n-1)
console.write(b)
שואל השאלה:
אמאלההה תודההה
אנונימית
בשמחהה
תעדכני אם עובד
שואל השאלה:
רגע כמה דברים
זה בפונקציה כן?לא בvoid
וconsole. write זה כאילו cout?
אנונימית
זה פונקציה שהיא void
ורגע את מתכנתת בפייתון כן?
אם הפקודה הזו אומרת להדפיס תו בלי לרדת שורה אז כן
שואל השאלה:
אני בc++
אנונימית
אהה אני בc# חחח