input: Write a function to implement the Gradient Descent Algorithm for linear regression given input data x, y. The function should iteratively update the slope (m_curr) and intercept (b_curr) using a given learning rate and a specified number of iterations. The function should print the current values of m_curr, b_curr, and the cost at each iteration and return the final values of m_curr and b_curr.
  assert gradient_descent([1, 2, 3, 4], [1, 4, 9, 16])==(4.0, 0.0)
  assert gradient_descent([1, 2, 3, 4], [2, 5, 10, 17])==(5.0, -0.5)
  assert gradient_descent([1, 2, 3, 4], [3, 6, 11, 18])==(6.0, -1.0)
  assert gradient_descent([1, 2, 3, 4], [4, 7, 12, 19])==(7.0, -1.5)
  assert gradient_descent([], [])==(0.0, 0.0)
output: def gradient_descent(x, y):
      if not x or not y:
          return 0.0, 0.0
      m_curr = 0
      b_curr = 0
      n = len(x)
      learning_rate = 0.01
      iterations = 1000
      
      for i in range(iterations):
          y_predicted = m_curr * x + b_curr
          cost = (1/n) * sum([val**2 for val in (y - y_predicted)])
          md = -(2/n) * sum(x * (y - y_predicted))
          bd = -(2/n) * sum(y - y_predicted)
          m_curr = m_curr - learning_rate * md
          b_curr = b_curr - learning_rate * bd
          print(f"Iteration {i+1}: m_curr = {m_curr}, b_curr = {b_curr}, cost = {cost}")
      
      return m_curr, b_curr