add recusion method