code: def combination_memo(n, r):
      
      memo = {}
      def recur(n, r):
          if n == r or r == 0:
              return 1
          if (n, r) not in memo:
              memo[(n, r)] = recur(n - 1, r - 1) + recur(n - 1, r)
          return memo[(n, r)]
      return recur(n, r)
docs: This function calculates nCr using memoization method.