recommendation logic