<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _recursive_merge(dct, merge_dct, raise_on_missing):
 # type: (Dict[str, Any], Dict[str, Any], bool) -> Dict[str, Any] """Recursive dict merge This modifies `dct` in place. Use `copy.deepcopy` if this behavior is not desired. """

    for k, v in merge_dct.items():
        if k in dct:
            if isinstance(dct[k], dict) and isinstance(merge_dct[k], BaseMapping):
                dct[k] = _recursive_merge(dct[k], merge_dct[k], raise_on_missing)
            else:
                dct[k] = merge_dct[k]
        elif isinstance(dct, Extensible):
            dct[k] = merge_dct[k]
        else:
            message = "Unknown configuration key: '{k}'".format(k=k)
            if raise_on_missing:
                raise KeyError(message)
            else:
                logging.getLogger(__name__).warning(message)

    return dct