add combine with recursion