שאלה ברקורסיה - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שאלה ברקורסיה


gevAA

Recommended Posts

אם זה כלכך פשוט אז אפשר תפתרון בבקשה..

כנראה לא הבנת אותי נכון.

הפורום הזה לא נועד בשביל שנפתור לך את שיעורי הבית, הפורום נועד בשביל נעזור לך לפתור אותם.

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

קישור לתוכן
שתף באתרים אחרים

  • 4 שבועות מאוחר יותר...

אמנם הת'רד הזה קצת ישן, אבל בכל זאת...

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

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

אם למשל הבעיה הייתה הפוכה, בהינתן 5 להדפיס 543212345, אז הפיתרון הרקורסיבי הינו טריביאלי שכן קל לראות שהפעלת הפונקציה על 5 שקולה להדפסת 5, הפעלת הפונקציה על 4 ושוב הדפסת 5, ואכן בבנית הפונקציה הרקורסיבית, היא תמומש בדיוק בסדר הנ"ל.

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

לדעתי (תקנו אותי אם אני טועה) אין מנוס מלבנות פונקצית עזר המקבלת פרמטר נוסף הרץ מ-1 עד הקלט, המקיפה את הפונקציה הרקורסיבית האמיתית באופן הבא:

void MirrorPrint(int num){
Aux(1,num);
}

void Aux(int x, int num){
if (x<num){
printf("%d ", x);
Aux(x+1, num);
printf("%d ", x);
}
else{
printf("%d ", x);
}
}

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

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

קישור לתוכן
שתף באתרים אחרים

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

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

קישור לתוכן
שתף באתרים אחרים

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

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

מכל מקום, Boomerang, תודה על ההבהרה :xyxthumbs:

קישור לתוכן
שתף באתרים אחרים

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

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

(מסוג הדברים שיגרום למורה/מתרגל לפתח אליך שנאה עמוקה)

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...