Fault Diagnosis and Recovery in Discrete Event Systems