add recursive way