input: from typing import List, Tuple
  
  def knapSack(W: int, wt: List[int], val: List[int], n: int) -> int:
      """
      Recursively solve the 0-1 knapsack problem using dynamic programming.
      Given a knapsack of capacity W, a list of items with respective weights (wt) 
      and values (val), determine the maximum value that can be obtained by 
      including items in the knapsack without exceeding its capacity.
      
      >>> knapSack(50, [10, 20, 30], [60, 100, 120], 3)
      220
      """
output:     
      if n == 0 or W == 0:
          return 0
      
      if wt[n-1] > W:
          return knapSack(W, wt, val, n-1)
      else:
          return max(val[n-1] + knapSack(W-wt[n-1], wt, val, n-1), knapSack(W, wt, val, n-1))
  