still need 0 and -1 recursive