Custom rewrite_rules – only pass numbers and not alphabetic characters

Instead of index.php/reco/?b=$1, try this:

"$wp_rewrite->index?pagename=reco&b=" . $wp_rewrite->preg_index( 1 )

You should also append a $ to your reco/([^/]*)/? regex to ensure the rule only matches the entire path, and not just the beginning.

Then flush your rules afterwards (just re-save your permalink settings in admin).

Update: Try using the page_rewrite_rules filter instead, and use get_query_var( 'b' ):

function wpse_139259_page_rules( $rules ) {
    return array(
        'reco/([^/]+)/?$' => 'index.php?pagename=reco&b=$matches[1]',
    ) + $rules;
}

add_filter( 'page_rewrite_rules', 'wpse_139259_page_rules' );