Mobiwan 02.12.2211:39

יישום רקורסיה ללא פונקציה נפרדת

תהיתי איך (או אפילו אם) ניתן ליישם רקורסיה ללא פונקציה נפרדת שקוראת לעצמה. עד כה, כל האלגוריתמים הרקורסיבים שנתקלתי בהם משתמשים בפונקציה נפרדת. שקלתי את זה רבות והגעתי לרעיון שהצהרת goto עם מוטציה משתנה כלשהי עשויה לבצע את העבודה, אבל אני לא משוכנע.
עשיתי קצת מחקר וקראתי את המאמר הזה וגיליתי מידע על משפט התכנות המובנה, שאומר שניתן ליישם כל אלגוריתם עם שלושה מבני נתונים בלבד, מה שמרמז שיישום רקורסיה כזה חייב להיות אפשרי, אבל אני עדיין לא יכול להרכיב הכל לידע עקבי והבנה לכל הגישה העתידית.
מָקוֹר:https://www.scaler.com/topics/imple?...
TheKid 02.12.2214:45
1. בהצלחה! בתגובה להודעה מספר 0
Dark-Wish 02.12.2217:00
2. בהגדרה אתה אמור לפתור את אותה בעיה על ידי פתרון בעיות קטנות יותר בתגובה להודעה מספר 0
אז באופן טבעי אתה אמור לקרוא לאותה פונקציה עם בעיה קטנה יותר

בסוף עם goto ומחסנית שתשמור פרמטרים אתה יכול לממש את כל רצף ה-callstack של אלגוריתם רקורסיבי, אבל מה המוטיבציה לעשות דבר כזה?
בן_זומא 03.12.2221:16
3. עצה ידידותית-הזהר מאוווד עם רקורסיה ואל תעשה ללא סיועובדיקה של מישהו מומחה לידך בתגובה להודעה מספר 0
רקורסיה היא לא משהו שמתכנתים מעדיפים, אפילו נמנעים. יש דרכים אחרות, וכמו שרשמו לך: מה המוטיבציה לעשות זאת?.
מציע לעזוב כרגע את הנושא, לפני התמקצעות לעומק בתוכנה ומחשבים.
אם כבר תרגיש "מאותגר" - ושוב, לא כדאי כרגע!, - אלו לא דברים לניסוי "בוא נראה" - לעשות רק עם מישהו/י מקצועי מאוד לידך.

ככל שעומק הרקורסיה גדול יותר - אתה גורם לזלילת משאבים, כל פעולה "יקרה" יותר,
מחשב - אפילו ראשי ועוצמתי - עלול לקרוס, PC יכול לאבד כיוון ולתפקד רע, אפילו לקרוס.
ראיתי וכמה פעמים עצרתי דברים כאלו. הם נעשו בתמימות ע"י כאלו שלא היו מודעים לתסבוכת שהם גורמים, או גרמו...
לפעמים משלבים במערכות עתירות אונליין ניהול מחסנית פנימית בתת מערכת, כדי למנוע ממשתמשים לנוע שוב ושוב לאותו מסך כאשר כל פעם באים ממקום אחר. בלגן שלא כדאי להיות בו. רק צרות.
Bar 07.12.2221:37
4. חחחח איזו הגזמה פרועה בתגובה להודעה מספר 3
לפי ההודעה שלך משתמע שצריך להוציא רישיון בשביל לכתוב רקורסיה...
כמו כל דבר, גם לרקורסיה יכול להיות באג, אבל זה לא הופך אותה לקטלנית למחשב שלך...

נשלח ע"י הסלולרי
nadavs 08.12.2209:10
6. רקורסיה מתבססת על חשיבה אינדוקטיבית ואין לו למה להמנע ממנה בתגובה להודעה מספר 3
מדובר בדרך אחת למימוש של פתרון של בעיות בעלות אופי אינקוטיבי (אפשר להקטין אותן לתתי בעיות)
מדובר בטכניקה שאולי קצת קשה לתפוס או להבין אבל אין שום סיבה להמנע ממנה - ישנן בעיות שקל מאוד לפתור באמצעות רקורסיה וקשה מאוד להבין את הפתרון האיטרטיבי שלהן (למשל מגדלי האנוי).

מה שכן נכון כאן הוא ששימוש לא יעיל, ללא memoization יוביל לחזרתיות בפתירת בעיות שנפתרו בעבר ומכאן לבזבוז משאבים.

אין מה לפחד - סה"כ צורת חשיבה קצת שונה.
nadavs 08.12.2209:05
5. נכון, המימוש הרקורסיבי שקורה עם פונק' שקוראת לעצמה נעשה על ידי מחסנית בתגובה להודעה מספר 0
הcall stack בסופו של דבר מנהל את הרקורסיה הזאת ובעצם אתה יכול להחליף את הcall stack במחסנית משלך ולנהל את זה באופן איטרטיבי.
בעצם בכל קריאה נדחף ערך מסוים למחסנית ובסוף הם נשלפים אחד אחרי השני

למה שתעשה את זה - אין לי מושג תגיד לי אתה?

למשל דוגמה פשוטה:
https://stackoverflow.com/questions?...

או מימוש של עצרת n! באמצעות מחסנית
https://cppsecrets.com/users/489510?...
העבר לפורום אחר
העבר לפורום:
סיבה:
תגובה חדשה
כותרת:
תוכן:
סמיילים:
הצג
עריכת אשכול
כותרת:
תוכן:
סמיילים:
הצג