input: Write a python function to calculate the factorial of a number using dynamic programming.
  assert factorial(5) == 120
  assert factorial(0) == 1
  assert factorial(7) == 5040
output: def factorial(n):
      if n == 0:
          return 1
      dp = [1] * (n + 1)
      for i in range(2, n + 1):
          dp[i] = dp[i - 1] * i
      return dp[n]