input: from typing import List
  
  
  def fizz_buzz(numbers: List[int] = None) -> List[str]:
      """ Replace numbers divisible by 3 with "Fizz", numbers divisible by 5 with "Buzz",
      and numbers divisible by both 3 and 5 with "FizzBuzz". If no numbers are provided, it defaults to generating numbers from 1 to 50.
      >>> fizz_buzz()
      ['1', '2', 'Fizz', '4', 'Buzz', 'Fizz', '7', '8', 'Fizz', 'Buzz', '11', 'Fizz', '13', '14', 'FizzBuzz', '16', '17', 'Fizz', '19', 'Buzz', 'Fizz', '22', '23', 'Fizz', 'Buzz', '26', 'Fizz', '28', '29', 'FizzBuzz', '31', '32', 'Fizz', '34', 'Buzz', 'Fizz', '37', '38', 'Fizz', 'Buzz', '41', 'Fizz', '43', '44', 'FizzBuzz', '46', '47', 'Fizz', '49', 'Buzz']
      >>> fizz_buzz([1, 3, 5, 15])
      ['1', 'Fizz', 'Buzz', 'FizzBuzz']
      """
      if not numbers:
          numbers = range(1, 51)
      result = []
      for i in numbers:
          if i % 3 == 0 and i % 5 == 0:
              result.append("FizzBuzz")
          elif i % 3 == 0:
              result.append("Fizz")
          elif i % 5 == 0:
              result.append("Buzz")
          else:
              result.append(str(i))
      return result
output:     if not numbers:
          numbers = range(1, 51)
      result = []
      for i in numbers:
          if i % 3 == 0 and i % 5 == 0:
              result.append("FizzBuzz")
          elif i % 3 == 0:
              result.append("Fizz")
          elif i % 5 == 0:
              result.append("Buzz")
          else:
              result.append(str(i))
      return result