didn't need to do是表示过去不必做某事, 事实上也没做的意思;
needn't have done则是表示: 过去不必做某事, 但事实上做了的意思。
John went to the station with the car to meet Mary, so she didn't need to walk back home. 约翰开车去车站接玛丽,所以她不必步行回家了。
John went to the station with the car to meet Mary, so she needn't have walked back home. 约翰开车去车站接玛丽,所以她本不必步行回家了。 (Mary步行回家,没有遇上John的车。)
典型例题
There was plenty of time. She ___.
A. mustn't have hurried B. couldn't have hurried C. must not hurry D. needn't have hurried
答案D。needn't have done. 意为"本不必",即已经做了某事,而时实际上不必要。
Mustn't have done 用法不正确,对过去发生的事情进行否定性推断应为couldn't have done, "不可能已经"。 must not do 不可以(用于一般现在时)。