recursive initialization