Partition(Data S) if (all points in S are of the same class) then return; for each attribute A do evaluate split on attribute A; Use best split found to partition S in S1 and S2; Partition(S1); Partition(S2); Initial call Partition(TrainingData)