methods and recusion