input: 
  def knapSack(W: int, wt: List[int], val: List[int], n: int) -> int:
      """ Solve the 0-1 Knapsack problem using a recursive approach.
      Given a list of items with their values and weights, and a capacity
      of the knapsack, find the maximum value that can be achieved without
      exceeding the capacity.
      >>> knapSack(50, [10, 20, 30], [60, 100, 120], 3)
      220
      """
  
      # Base Case
      if n == 0 or W == 0:
          return 0
  
      # If weight of the nth item is more than Knapsack capacity W,
      # then this item cannot be included in the optimal solution
      if wt[n-1] > W:
          return knapSack(W, wt, val, n-1)
  
      # return the maximum of two cases:
      # (1) nth item included
      # (2) not included
      else:
          return max(val[n-1] + knapSack(W-wt[n-1], wt, val, n-1), 
                     knapSack(W, wt, val, n-1))
  
  # end of function knapSack
  
output:     
      # Base Case
      if n == 0 or W == 0:
          return 0
  
      # If weight of the nth item is more than Knapsack capacity W,
      # then this item cannot be included in the optimal solution
      if wt[n-1] > W:
          return knapSack(W, wt, val, n-1)
  
      # return the maximum of two cases:
      # (1) nth item included
      # (2) not included
      else:
          return max(val[n-1] + knapSack(W-wt[n-1], wt, val, n-1), 
                     knapSack(W, wt, val, n-1))
  