01-01-2012, 00:53
|
|
|
חבר מתאריך: 17.03.02
הודעות: 2,354
|
|
שאלה לגבי נכונות קוד ב-C (רקורסיה)
שלום לכולם,
קיבלתי תרגיל בית בנושא רקורסיה. פתרתי את התרגילים, כך שהשאלה שלי היא יותר נכונות מתמטית שבאה לידי ביטוי בקוד שכתבתי.
לדוגמה, בתרגיל הראשון התבקשתי לכתוב פונקציה רקורסיבית שמקבלת מספר ומחזירה את המְחַלְקִים הראשוניים שלו, מהגדול לקטן. זה הפתרון שלי:
קוד:
void printPrimeFactors(int num) {
if(num == 1)
return;
else {
int i;
i = 2;
while (num%i != 0)
i++;
cout<<i<<" ";
printPrimeFactors(num/i);
}
}
השאלה שלי היא: בשום שלב אני לא בודק האם המספר שאני מדפיס הוא אכן ראשוני, אלא בכל פעם אני בודק את המחלק הקטן ביותר שיש (החל מ-2, כמובן) ומחלק בו.
בהנחה והיעילות לא ממש מעניינת אותי, האם מבחינה מתמטית זה תקין, או שיצאתי מדעתי ואני מניח הנחות שגויות? כי בעיקרון התוכנית עובדת כמצופה.
אגב, עשיתי חיפוש בגוגל (לאחר שפתרתי את התרגיל, כמובן ), וראיתי שהפתרונות כללו בדיקה האם המספר שמחלקים בו הוא אכן ראשוני.
מה דעתכם בנושא?
תודה
|