• Защo трябва да се внимава като се пишат макроси (Мило, Муков)

    • Лоша програма - O(2**n)

      • #include <iostream>

        using namespace std;


        #define MAX(a, b) (((a) > (b)) ? (a) : (b))


        int max_elem(int arr[], int n)

        {

        if (n == 1) return arr[0];

        return MAX(arr[n - 1], max_elem(arr, n - 1));

        }


        int arr[100];


        int main()

        {

        for (int i = 0; i < 100; i++) arr[i] = 100 - i;

        cout << max_elem(arr, 100) << endl;

        return 0;

        }

    • Хубава програма - O(n)

      • #include <iostream>

        using namespace std;


        int max(int a, int b)

        {

        return a > b ? a : b;

        }


        int max_elem(int arr[], int n)

        {

        if (n == 1) return arr[0];

        return max(arr[n - 1], max_elem(arr, n - 1));

        }


        int arr[100];


        int main()

        {

        for (int i = 0; i < 100; i++) arr[i] = 100 - i;

        cout << max_elem(arr, 100) << endl;

        return 0;

        }

    • Защо става така

      • При "MAX" сойността на израза "a" или "b" не се запомня във временна променлива като при "max" а се смята 2 пъти. Първо при изчислението на резултата на условието и след това при връщане на резултата

Последно модифициране: събота, 12 ноември 2011, 17:38