שלום! צריכה ייעוץ קטן.

immortal lady

New member
שלום! צריכה ייעוץ קטן.

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

vinney

Well-known member
תסתכלי בשאלות נפוצות

אם זה לא עוזר - אז תמקדי קצת יותר את השאלה
 

immortal lady

New member
אני אתן דוגמא

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

vinney

Well-known member
שוב, בשאלות נפוצות יש מאמר

די ארוך בנושא, תקראי אותו.
 

immortal lady

New member
קראתי בשאלות הנפוצות

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

vinney

Well-known member
בקצרה

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

immortal lady

New member
הבנתי בערך...

אני יכולה להגיד שהתנאי עצירה שלי הוא ברגע שהמערך נגמר...אבל איפה אני שומרת את המספר הגדול ביותר במערך....?
 

vinney

Well-known member
תנאי העצירה נכון

איפה את שומרת? למה לשמור אותו? את מחזירה את המספר שמצאת לקורא, זה המשמעות של פונקציה.
 

vinney

Well-known member
תחשבי על זה כך

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

immortal lady

New member
מספר מקסימלי במערך בגודל 1

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

vinney

Well-known member
אוף

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

immortal lady

New member
כדי לפתור את השאלה

אני חייבת לעשות מיון של המערך קודם או שאפשר בלי?
 

vinney

Well-known member
אם את עושה מיון, אז לא צריך רקורסיה

לוקחים את האיבר האחרון וזהו
אז כנראה שלא
 

immortal lady

New member
נראה לי שהצלחתי....

רק אם תוכל לראות שזה מה שהייתי צריכה לעשות......אני הודה לך. int max(int a[],int n) { if(n==1) return *a; if(*a>*(a+1)) *(a+1)=*a; return max(a+1,n-1); }
 

vinney

Well-known member
קצת לא יפה מבחינה תחבירית

לעשות return *a כשa מוגדר כמערך. זה מתקפל לך? אני הייתי מצפה ללפחות אזהרה על זה. בכל אופן, זה מכוער. כנ"ל כל שאר השימושים ב* בהקשר הזה. ולא, זה לא נכון. מציע לך במקום לנחש - להשתמש בטבלת מעקב ולבדוק את עצמך.
 
למעלה