C++/פונקציות/תרגילים: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
Ybungalobill (שיחה | תרומות)
תרגילים
(אין הבדלים)

גרסה מ־17:04, 4 במרץ 2008



רקורסיה

מספרי פיבונאצ'י

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

פתרון

אחת האפשרויות מוצגת כאן. פתרון זה מבוסס על שמירת האיבר הקודם ולפני הקודם במשתנים f0 ו-f1. כאשר מחושב האיבר הבא (f2) כבר אין צורך באיבר שלפני הקודם וניתן "לזוז" איבר אחד קדימה.

int Fibonacci(int n)
{
    if(n <= 1)
        return n;

    int f0 = 1, f1 = 1;
    for(int i = 2; i < n; i++)
    {
        int f2 = f1 + f2;
        f0 = f1;
        f1 = f2;
    }
    return f1;
}

עצרת

בפרק על לולאות כתבת תוכנית שמחשבת עצרת:  . כתוב פונקציה שתחשב עצרת באמצעות אלגוריתם רקורסיבי.

פתרון
long Factorial(long n)
{
    if(n <= 1)
        return 1;
    else
        return Factorial(n-1)*n;
}