ABA


"יישום רקורסיה ללא פונקציה נפרדת"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #22476 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 22476
Mobiwan
חבר מתאריך 21.9.22
3 הודעות
   11:39   02.12.22   
אל הפורום  
  יישום רקורסיה ללא פונקציה נפרדת  
 
   תהיתי איך (או אפילו אם) ניתן ליישם רקורסיה ללא פונקציה נפרדת שקוראת לעצמה. עד כה, כל האלגוריתמים הרקורסיבים שנתקלתי בהם משתמשים בפונקציה נפרדת. שקלתי את זה רבות והגעתי לרעיון שהצהרת goto עם מוטציה משתנה כלשהי עשויה לבצע את העבודה, אבל אני לא משוכנע.
עשיתי קצת מחקר וקראתי את המאמר הזה וגיליתי מידע על משפט התכנות המובנה, שאומר שניתן ליישם כל אלגוריתם עם שלושה מבני נתונים בלבד, מה שמרמז שיישום רקורסיה כזה חייב להיות אפשרי, אבל אני עדיין לא יכול להרכיב הכל לידע עקבי והבנה לכל הגישה העתידית.
מָקוֹר:https://www.scaler.com/topics/implementing-recursion/


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  בהצלחה! TheKid 02.12.22 14:45 1
  בהגדרה אתה אמור לפתור את אותה בעיה על ידי פתרון בעיות קטנות יותר Dark-Wish 02.12.22 17:00 2
  עצה ידידותית-הזהר מאוווד עם רקורסיה ואל תעשה ללא סיועובדיקה של מישהו מומחה לידך בן_זומא 03.12.22 21:16 3
     חחחח איזו הגזמה פרועה Bar  07.12.22 21:37 4
     רקורסיה מתבססת על חשיבה אינדוקטיבית ואין לו למה להמנע ממנה nadavs  08.12.22 09:10 6
  נכון, המימוש הרקורסיבי שקורה עם פונק' שקוראת לעצמה נעשה על ידי מחסנית nadavs  08.12.22 09:05 5

       
TheKid לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.10.07
18370 הודעות, 1 פידבק, 2 נקודות
   14:45   02.12.22   
אל הפורום  
  1. בהצלחה!  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dark-Wish
חבר מתאריך 25.5.05
12586 הודעות, דרג אמינות חבר זה
   17:00   02.12.22   
אל הפורום  
  2. בהגדרה אתה אמור לפתור את אותה בעיה על ידי פתרון בעיות קטנות יותר  
בתגובה להודעה מספר 0
 
   אז באופן טבעי אתה אמור לקרוא לאותה פונקציה עם בעיה קטנה יותר

בסוף עם goto ומחסנית שתשמור פרמטרים אתה יכול לממש את כל רצף ה-callstack של אלגוריתם רקורסיבי, אבל מה המוטיבציה לעשות דבר כזה?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
בן_זומא
חבר מתאריך 25.10.20
285 הודעות, דרג אמינות חבר זה
   21:16   03.12.22   
אל הפורום  
  3. עצה ידידותית-הזהר מאוווד עם רקורסיה ואל תעשה ללא סיועובדיקה של מישהו מומחה לידך  
בתגובה להודעה מספר 0
 
   רקורסיה היא לא משהו שמתכנתים מעדיפים, אפילו נמנעים. יש דרכים אחרות, וכמו שרשמו לך: מה המוטיבציה לעשות זאת?.
מציע לעזוב כרגע את הנושא, לפני התמקצעות לעומק בתוכנה ומחשבים.
אם כבר תרגיש "מאותגר" - ושוב, לא כדאי כרגע!, - אלו לא דברים לניסוי "בוא נראה" - לעשות רק עם מישהו/י מקצועי מאוד לידך.

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Bar  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 24.3.02
24214 הודעות, 7 פידבק, 14 נקודות
   21:37   07.12.22   
אל הפורום  
  4. חחחח איזו הגזמה פרועה  
בתגובה להודעה מספר 3
 
   לפי ההודעה שלך משתמע שצריך להוציא רישיון בשביל לכתוב רקורסיה...
כמו כל דבר, גם לרקורסיה יכול להיות באג, אבל זה לא הופך אותה לקטלנית למחשב שלך...

נשלח ע"י הסלולרי


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

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

אין מה לפחד - סה"כ צורת חשיבה קצת שונה.


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

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

למשל דוגמה פשוטה:
https://stackoverflow.com/questions/60130001/how-to-implement-recursive-function-only-using-stacks

או מימוש של עצרת n! באמצעות מחסנית
https://cppsecrets.com/users/489510710111510497118107979811497495464103109971051084699111109/Factorial-using-Stack.php


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       
דרג לפי חשיבות הנושא  דרג לפי חשיבות הנושא   



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net