input: Write a python function to perform recursive feature elimination using RFE and parameter tuning using grid search on a given model and dataset. 
  assert recursive_feature_elimination_and_grid_search(model, X, y) is not None
output: def recursive_feature_elimination_and_grid_search(model, X, y):
      from sklearn.feature_selection import RFE
      from sklearn.model_selection import GridSearchCV
      
      # Define the RFE with the given model
      rfe = RFE(estimator=model)
      
      # Define parameter grid for GridSearchCV
      param_grid = {
          'n_features_to_select': [5, 10, 15, 20],  # Example values, can be adjusted
          'estimator__C': [0.1, 1, 10]  # Example parameter for estimator, adjust based on the model
      }
      
      # Create the GridSearchCV object
      grid_search = GridSearchCV(estimator=rfe, param_grid=param_grid, cv=5)
      
      # Fit the GridSearchCV
      grid_search.fit(X, y)
      
      return grid_search.best_estimator_