Recursive Insertion in Hash Table (Linear Probing)
When commenting to describe a function's purpose, it's more common to have them on top of the signature of the function definition.  Having them next to the prototypes like that makes those lines harder to read and increases the code'd horizontal length.
Your curly brace usage with single-line statements is inconsistent.  It's also better to use them for all statements like these and can prevent some bugs and ease maintenance.
Instead of initializing the arrays with a loop, you can use std::fill_n():

std::fill_n(array, MAX_SIZE, 0);
std::fill_n(flags, MAX_SIZE, false);


While it may not matter in smaller programs, it's still more concise and can be safer.
You're passing C-arrays to functions, which shouldn't be done in C++ as this will cause them to decay to pointers.  Instead, pass in an object of a container class such as std::vector (dynamic) or std::array (static).  Choose whichever best gets the job done for you.