cleaner code
recursive step not quite there yet.