input: Write a function to find the maximum value within a nested dictionary. Given a nested dictionary, the function should recursively search through each level of the dictionary to find and return the maximum value. If the dictionary is empty, return None.
  
  assert findMaxValue({})==None
  assert findMaxValue({"key1": 10, "key2": 20})==20
  assert findMaxValue({
      "key1": {
          "value1": 10,
          "value2": 20
      },
      "key2": {
          "value3": 40
      },
  })==40
  assert findMaxValue({
      "key1": {
          "value1": 10,
          "value2": 20
      },
      "key2": {
          "value3": {
              "value4": 50
          }
      },
  })==50
output: def findMaxValue(d):
      if not d:
          return None
      max_value = None
      for key, value in d.items():
          if isinstance(value, dict):
              max_value = max(max_value, findMaxValue(value)) if max_value is not None else findMaxValue(value)
          else:
              max_value = max(max_value, value) if max_value is not None else value
      return max_value