OK, thanks to all of the great feedback, I have a better understanding about recursion. I am now attempting to apply it and I have come across a problem that I can't seem to pinpoint. I have written the "eight queens" program, but for some reason, I get an infinite loop. I think my base case is ok. Can someone help me figure out what I am doing wrong here? Thanks in advance, Eric #include using namespace std; const int BOARD_SIZE = 8; // function prototypes void fillBoard( int [], int, int ); bool noConflict( int [], int, int ); void printBoard( int [], int ); //-------------------------------------------------------------- // main method int main() { int chessboard[ BOARD_SIZE ]; // represents a chessboard with 8 rows (0-7) int column = 0; int count = 0; // keeps track of the count fillBoard( chessboard, column, count ); // invokes fillBoard function to start filling the chessboard return 0; // indicates sucessful termination } // end main method //-------------------------------------------------------------- // fillBoard method void fillBoard( int board[ BOARD_SIZE ], int c, int cnt ) { for( int r = 0; r <= 7; r ++ ) // for every row on the board { board[ c ] = r; // assign the value of row to the column if( noConflict( board, r, c ) ) // if there is not a conflicting queen { if( c == 7 ) // if it is the last column { printBoard( board, cnt); // output the board } else { fillBoard( board, c + 1, cnt ); // else recursively invoke fillBoard for the next column } } } } // end fillBoard method //-------------------------------------------------------------- // noConflict method bool noConflict( int board[ BOARD_SIZE ], int r, int c ) { for( int col = c - 1; col >= 0; col-- ) // for each column on the board { if( board[ col ] == r // checks horizontally to the left || board[ col ] == r + c - col // checks diagonally moving down and to the left || board[ col ] == r + col - c ) // checks diagonally moving up and to the left { return false; // there is a conflict } else { return true; // there is not a conflict } } return true; // there is not a conflict } // end noConflict method //------------------------------------------------------------- // printBoard method void printBoard( int board [ BOARD_SIZE ], int cnt ) { cout << "Count = " << ++cnt << endl; // output the count for( int r