הנה אפשרות לדוגמה (יש כל מיני דרכים לעשות את זה). מקווה שאין לי טעות... void fib( n, m ) { int k = n+m; printf("%d, ", k); fib( m, k); } int main() { printf("0, 1, "); fib(0, 1); }
סידרת פיבונאצ´י היא סדרה חשבונית היא לא נגמרת במספר מסוים אם אתה רוצה לעשות פונקציה שתדפיס את כל המספרים בסדרה עד למספר שאתה נותן - אז אתה צריך תנאי עצירה בכל מקרה - פיבונאצ´י ידוע בזה שבמספר נמוך יחסית - המחסנית נתקעת ב OVERFLOW ולכן אי אפשר למצוא מספרים גבוהים בסידרה בעזרת פונקציה רקורסיבית
2. פשוט הערתי מה לא בסדר בתוכנית שהיא כתבה. 3. כשאנשים לומדים תכנות בכלל ורקורסיות בפרט, מלמדים אותם בעיקר תכניקה ומעט מאוד יעילות לצערי. אחת הדרכים ללמוד רקורסיות היא לעשות את סדרת פיבונאצ´י שקודם הם עשו אותה עם לולאה עם רקורסיה. 4. לשמחתי הרבה אני וסדרת פיבונאצ´י נפרדנו לפני די הרבה שנים.
אכן סדרת פיבונאצ´י היא סדרה אין סופית, אבל נהוג בלימודי תכנות לתת לה תנאי עצירה בדיוק בגלל זה. בשיעורי C לומדים תכנות ולא מתמטיקה ולכן אין חשיבות לכן שזאת סדרה אין סופית.
לא ביקשו כאן פונקציה שמביאה את הסדרה עד מספר מסויים - אלא פונקציה שמביאה את הסידרה בכללי אמנם - הפונקציה תיכנס ל OVERFLOW מהר מאוד - אבל זה כבר לא מעניננו - התשובה ניתנה במלואה
שהתוכנית שנתתי היא האופציה ה"חסכונית" יותר (מבין האופציות הרקורסיביות). זו לא הפונקציה שנותנת סיבוכיות של 2 בחזקת n , אלא עוקפת את זה ע"י זה שהיא מקבלת את שני המספרים האחרונים, וככה חוסכים את הבזבוז של לחשב כל דבר שוב ושוב (כמו בפונקציה שנרשמה למטה בפתיל).
פיבונצ´י מוגדרת ע"י פונקציה רקורסיבית אחת, פיבונצ´י(0) = 0 פיבונצ´י(1) = 1 פיבונצ´י = פיבונצ´י(n-1) + פיבונצ´י(n-2) אבל אפשר גם לחשב את פיבונצ´י באופן לא רקורסיבי ע"י שימוש בערכי הזהב הקבועים (ראה ספר בנושא..מדובר בנוסחה פשוטה).