faster recustion