ולפתרון.
התוכנית שלך דווקא כמעט בסדר. למספר 1234567 היא הדפיסה 1, 3 ו - 5. מה הבעיה? התוכנית שלך בודקת את num, שהוא הערך המוחזר של printnoneven (אגב, ההיפך מ - EVEN זה ODD). הערך המוחזר הזה הוא n%10, אבל ה-n הוא n/10. ואז, כשאתה באיטרציה של 12345, למשל, אתה בעצם בודק את ה - 4. כשאתה באיטרציה של 1234567, אתה בודק את ה - 6. 5 מודפס כשבודקים את 123456, ו-7 לעולם לא יודפס, כי אף אחד לא בודק אותו. הנה הגרסה שלי:
void printnoneven(int n) { int num; if(n != 0) { printnoneven(n/10); num = n%10; if(num % 2 == 1) printf("%d ", num); } }
הפונקציה הזו לא לוקחת את הערך המוחזר. הוא לא מעניין. היא שולחת את עצמה לעוד איטרציה בשרשרת הרקורסיה, עם המספר הקטן יותר, ובדרך החוצה היא תבדוק את הספרה הנוכחית הקטנה ביותר (במספר שבעצם יילך ויגדל), ותדפיס אותה אם היא אינה זוגית.