שאלה בנוגע לפונקציות

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

לייק 1

חבר’ה אני שמח נורא על הסקרנות ומעודד נורא את הדיון, אבל תשתדלו בבקשה לא לעשות לעצמכם הנחות ולפרסם פה משפטים שאתם לא בטוחים שהם נכונים :slight_smile:
יש הרבה אנשים שקוראים את מה שכתבתם, והפורומים הם פלטפורמת למידה לכל דבר :slight_smile:

תרשים זרימה לרקורסיביות (?) קל לראות למה קשה לעקוב אחרי זה - במקום כן / לא בכל שלב, יכול להיות פיצול בכל שלב ללא סיום השלב הקודם

2 לייקים

החלטתי לשים פה כי זה קשור לפונקציות. אני במחברת 4 של שבוע 3, בתרגיל באמצע המחברת (זה: “כתבו פונקציה שמקבלת רשימה, ומחזירה רשימה המכילה את הרשימה המקורית, ומייד אחריה את אותה רשימה בסדר הפוך.
לדוגמה: עבור הרשימה [1, 2, 3] תוחזר הרשימה: `[1, 2, 3, 3, 2, 1]”)
בסוף (מלא זמן) פתרתי בצורה הרצויה, אבל:
אולי זו השעה אבל אני לא מצליחה למצוא מה עשיתי לא נכון בקוד,
ואני רק מצליחה להגיע למסקנה שהפונקציה משנה לי את כל הרשימות שקשורות לפונקציה, בפנים ומחוץ לפונקציה (את זה אני עוד מוכנה לקבלת למרות שגם עם ההגיון של זה אני מוכנה להתווכח), ויותר מזה - את כל הרשימות שהשתמשתי להשמה - משני הצדדים של ההשמה (?!)
קשה לי להאמין שזה נכון. שלושת האפשרויות שלי הן כאלו

  1. עשיתי משהו בקוד שאני לא מצליחה לעלות עליו שגורם לתופעות לוואי מוזרות (הכי סביר)
  2. לא הבנתי משהו שקורה פה, ואולי זה הוסבר איפשהוא (גם סביר)
  3. הבנתי נכון, אבל במקרה הזה אני ממש לא מבינה את ההיגיון, וגם לא איך לצאת מזה

עצות?

כמה סלט על שאלה שהתשובה עליה היא מאוד פשוטה…

בשבילי שפונקציה תחזיר משהו, היא צריכה שיהיה בה: return; לא שמת בה return? - אז היא לא (!) תחזיר כלום.

זהו.
זה הכל.


פונקציה בסך הכל עושה את מה שאומרים לה לעשות, והיא מחזירה את מה שאומרים לה להחזיר.

אתה יכול להגיד לה לעשות גם מליון חישובים, על מליון משתנים, ולא לקרוא לעצמה, או כן לקרוא לעצמה, או אנא עארף…ותהיה שם יופי של מסיבה. אבל אם אתה רוצה שהיא תחזיר משהו - אז אתה גם צריך להגיד לה מה.

ולכן זה סופר מגניב שהפונקציה שלך מזמנת את עצמה, ועושה שם ים דברים מגניבים, אבל בסופו של דבר היא תחזיר את מה שאמרת לה להחזיר, ואם לא אמרת לה להחזיר כלום - אז היא לא תחזיר כלום.

יש שאלות?

יש הסבר מעולה במחברת 5
וגם הסבר בתרגול וידאו האחרון (:
גם לי השאלות האלו עלו במחברת 4 (:

לייק 1

רק עכשיו הבנתי שהשתמשתי ב pop לפתרון התרגול הזה (כי זה מה שהיה בתרגיל הקודם) ושממש לא היה צריך את זה. אם לא הייתי משתשמשת בזהת לא היו צצות לי כל הבעיות האלו עם הפונקציה :woman_facepalming:

לייק 1

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

הי, קובי. :slight_smile:

-כשאמרתי: “כמה סלט על שאלה שהתשובה עליה היא מאוד פשוטה” - התכוונתי שבזמן שהאנשים (הנחמדים!) שעזרו לך פה זרקו עליך הרבה אינפורמציה -
לשאלה שלך יש תשובה שהיא סופר דופר תכלס.

-וכשאני משתמש בהדגשות ובסימני קריאה - זה לא כי אני מזלזל בך - זה כי ככה למדו אותי שהדרכה ברורה צריכה להיראות.


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

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

אני שונא את זה שאנשים מתנשאים מעל למישהו רק כי הוא לא הבין משהו, והרבה מעבר לזה: אני מתעב את ההתנהגות של אנשים ש-“מכבים” אנשים אחרים ששואלים שאלות.

למה? - כי לדעתי לשאול שאלות זה חשוב.
וכשאתה גורם למישהו להרגיש רע עם זה שהוא שאל שאלה - אתה מלמד אותו שלשאול שאלות זה לא בסדר, ובעיני זה איכס.

רוצה שננסה שוב? :slight_smile:

3 לייקים

הלוואי האקסים שלי היו חוזרים אלי עם תשובות כאלה :heart:
אם הייתי הוא לגמרי הייתי נותן לזה second chance

3 לייקים

תודה על התשובה והנימוק. אם אתה מתעקש לדעת, אז הסרקזם היה בתיאור סופר מגניב. זה בנוסף להדגשות וסימני הקריאה והטון המשתמע, נתן את התחושה. גם לפני תגובתך לא באמת נפגעתי, יש לי מספיק קילומטרז’ רשת וחיים כי לא לקחת דברים אישית. רק הרגשתי קצת צורך לשים קצת מראה על הטון המשתמע. בכל אופן, הבהרת את כוונתך, הכל טוב, ומודה לך על כך :slight_smile:
לענין הדיון והתשובה שלך. כמו שאמרתי, הנושא לא היה ‘איך גורמים לפונקציה להחזיר ערך’, שעל זה בעצם ענית, אלא על האופן הנכון לכתוב ריקורסיה, והדיון מאותה נקודה כלל כמה הערות מאוד נכונות של מספר מגיבים. אין לי את הניסיון והידע כרגע לדעת למה ואיך זה בדיוק ככה, אבל מהדיון פה, ומחקירת הנושא שכוללת שיחה עם בוגר מדעי המחשב בטכניון, למדתי שהנושא של שימוש בריקורסיות הוא מאוד מאוד מורכב, ובין השאר, כמו שציינו פה נכון, אינו ידידותי כלל למשאבי המחשב, וזהו רק קצה הקרחון. זה נושא שיש ללמוד אותו באופן ספציפי, והוא רחוק מלהיות ‘סכום אפס’ של אם החזרתי ערך מהפונקציה כקריאה לעצמה או לא.
ללא קשר למורכבות הנושא, הדיון התחיל מכך שהבחנתי שבקריאה לפונקציה מתוך עצמה, ללא השימוש בריטרן, למרות שלכאורה הקוד עובד, מתעוררות שגיאות שונות ומשונות. וניסיתי להבין פשוט למה זה ככה, כי לכאורה, זה לא אמור לשנות. ברגע שקראתי לפונקציה, היא פשוט מריצה את עצמה שוב. השאלה מעולם לא היתה על איך להחזיר ערך מפונקציה

3 לייקים

הלוואי שכל דיון בין מתכנתים היה מסתיים ככה, שאפו ושנמשיך לראות בפורום רק אהבה למקצוע ואחד לשני.
באנו לעשות כיף ולהפיק את המקסימום, גם בפן המקצועי וגם בפן האנושי הבין־אישי :slight_smile:

3 לייקים

אז מסתבר שכבר עכשיו יש לנו מה לתרום לענף😉

לייק 1