def step_gradient_descent(W, b, dW, db, alpha):
    """Single iteration of gradient descent.

    Args:
        W (ndarray[n, 1]):      weights for current step
        b (ndarray[1, 1]):      bias for current step
        dW (ndarray[n, 1]):     weight gradients for current step
        db (ndarray[1, 1]):     bias gradient for current step
        alpha (float):          learning rate

    Returns:
        W (ndarray[n, 1]):      updated weights
        b (ndarray[1, 1]):      updated bias
    """
    return W - alpha * dW, b - alpha * db