נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: רקורסיה

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
Benny
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 12 September 2006 בשעה 18:35 | IP רשוּם
ציטוט Benny

קוד:
int func(int x)
{
if (x>10)
func(x-1);
return x;
}


למה הקוד הנ"ל, מחזיר לי את המספר שאני מכניס, במקרה שהוא גדול מ10 ?
למשל אני מכניס 29 זה מחזיר לי 29.
כשהוספתי הדפסה:
קוד:
int func(int x)
{
if (x>10)
func(x-1);
printf("%d\n",x);
return x;
}

זה הדפיס לי את כל המספרים מ10 עד 29 (כש X היה שווה 29.)
מה אני יכול לעשות ?
הפונקציה אמורה לבדוק אם המספר גדול מ10 אם כן היא מורידה אותו ל 10.
והיא חייבת להיות רקורסיבית.
חזרה לתחילת העמוד הצג את כרטיס החבר של Benny חפש הודעות אחרות של Benny בקר בדף הבית של Benny
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 12 September 2006 בשעה 18:37 | IP רשוּם
ציטוט shoshan

שים לב שאמרת לו:
קוד:
return x;

ואין לו שום סיבה להפסיק לפני זה או להחזיר ערך אחר.

נראה לי שבמקום:
קוד:
func(x-1);


אתה צריך:
קוד:
return func(x-1);


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
Benny Ezra
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 12 September 2006 בשעה 20:54 | IP רשוּם
ציטוט Benny Ezra


קוד:
int func(int x)
{
if (x>10)
return func(x-1);
else
return x;
}


למה זה לא מסתדר עם קלט מעל 4900 ? זה אומר שגיאה שאני עושה debug
unhandled exception at 0x... in SchoolWork.exe: 0x... : Stack overflow
חזרה לתחילת העמוד הצג את כרטיס החבר של Benny Ezra חפש הודעות אחרות של Benny Ezra בקר בדף הבית של Benny Ezra
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 12 September 2006 בשעה 21:18 | IP רשוּם
ציטוט shoshan

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

__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
Benny Ezra
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 13 September 2006 בשעה 07:10 | IP רשוּם
ציטוט Benny Ezra

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


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 13 September 2006 בשעה 07:51 | IP רשוּם
ציטוט אורח

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


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 13 September 2006 בשעה 13:19 | IP רשוּם
ציטוט Benny Ezra

תודה על העזרה, אז עדיף להשתמש בייחוס ? במקום ליצור משתנה חדש?
זה יעבוד עם הרבה ?

חזרה לתחילת העמוד הצג את כרטיס החבר של Benny Ezra חפש הודעות אחרות של Benny Ezra בקר בדף הבית של Benny Ezra
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 13 September 2006 בשעה 14:52 | IP רשוּם
ציטוט shoshan

זה עוזר אבל עדיין לא ממש...

__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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