since carry is 0 , and we need 0 at C 's bit position, we can use 0 and 0  or 1 and 1 at A and B bit position
dp [ third , seta , setb , carry ] += func ( third + 1 , seta , setb , 0 , number ) + func ( third + 1 , seta - 1 , setb - 1 , 1 , number ) ; } return dp [ third , seta , setb , carry ] ; }