can you tell me what is exactly happening in the recursive case and what is the use of self.train(data_left)