<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _CalculateHashesFileEntry( self, file_system, file_entry, parent_full_path, output_writer):
 """Recursive calculates hashes starting with the file entry. Args: file_system (dfvfs.FileSystem):
 file system. file_entry (dfvfs.FileEntry):
 file entry. parent_full_path (str):
 full path of the parent file entry. output_writer (StdoutWriter):
 output writer. """

    # Since every file system implementation can have their own path
    # segment separator we are using JoinPath to be platform and file system
    # type independent.
    full_path = file_system.JoinPath([parent_full_path, file_entry.name])
    for data_stream in file_entry.data_streams:
      hash_value = self._CalculateHashDataStream(file_entry, data_stream.name)
      display_path = self._GetDisplayPath(
          file_entry.path_spec, full_path, data_stream.name)
      output_writer.WriteFileHash(display_path, hash_value or 'N/A')

    for sub_file_entry in file_entry.sub_file_entries:
      self._CalculateHashesFileEntry(
          file_system, sub_file_entry, full_path, output_writer)