**fig2_7.txt** /* 1*/ int Max_Sub_Sum( const int A[ ], const int Left, const int Right ) /* 2*/ { /* 3*/ int Max_Left_Sum = 0, Max_Right_Sum = 0; /* 4*/ int Max_Left_Border_Sum = 0, Max_Right_Border_Sum = 0; /* 5*/ int Left_Border_Sum = 0, Right_Border_Sum = 0; /* 6*/ int Center = ( Left + Right ) / 2; /* 7*/ if( Left == Right ) // Base Case. /* 8*/ if( A[ Left ] > 0 ) /* 9*/ return A[ Left ]; /*10*/ else /*11*/ return 0; /*12*/ Max_Left_Sum = Max_Sub_Sum( A, Left, Center ); /*13*/ Max_Right_Sum = Max_Sub_Sum( A, Center + 1, Right ); /*14*/ for( int i = Center; i >= Left; i-- ) /*15*/ { /*16*/ Left_Border_Sum += A[ i ]; /*17*/ if( Left_Border_Sum > Max_Left_Border_Sum ) /*18*/ Max_Left_Border_Sum = Left_Border_Sum; /*19*/ } /*20*/ for( i = Center + 1; i <= Right; i++ ) /*21*/ { /*22*/ Right_Border_Sum += A[ i ]; /*23*/ if( Right_Border_Sum > Max_Right_Border_Sum ) /*24*/ Max_Right_Border_Sum = Right_Border_Sum; /*25*/ } /*26*/ return Max3( Max_Left_Sum, Max_Right_Sum, /*27*/ Max_Left_Border_Sum + Max_Right_Border_Sum ); /*28*/ } /*29*/ int /*30*/ Max_Subsequence_Sum( int A[ ], unsigned int N ) /*31*/ { /*32*/ return Max_Sub_Sum( A, 0, N - 1 ); /*33*/ }