Simple recursive CTE stuck in infinite loop
I think you are missing the anchor WHERE... 

select parent, child as descendant, Date, 1 as level
    from #source where &lt;&lt;SOMETHING TO SELECT JUST FEW RECORDS&gt;&gt;


Otherwise, every time you will be selecting all the records.

Moreover, check the first 2 records...

('05529744', '05395782', '9999-12-31'),
('05395782', '05529744', '2017-12-31'),


They are cyclical... This will never finish...
Fix the data, give it another try and let me know

Other thing that will throw error is the date convertion...
Your date fields should look like this: 

convert(date,'9999-12-31',120)


Fixing some of the data. The following CTE will work:

CREATE TABLE #source
(Parent varchar(10), Child varchar(10), Date datetime)

INSERT INTO #source
(Parent, Child, Date)
VALUES
('05529744', '05529744', convert(date,'9999-12-31',120)),
('05395782', '05395782', convert(date,'2017-12-31',120)),
('05395782', '05147762', convert(date,'2016-12-31',120)),
('05147762', '04564728', convert(date,'2016-09-30',120)),
('04564728', '04299824', convert(date,'2013-07-31',120)),
('05224920', '05224920', convert(date,'2017-03-31',120)),
('04999841', '04999841', convert(date,'2016-10-31',120)),
('04999841', '04824720', convert(date,'2015-12-31',120)),
('04824720', '02917870', convert(date,'2015-06-30',120))

select * from #source order by 1

;with 
descendants as
  ( select parent, child as descendant, Date, 1 as level
    from #source where Parent = Child
  union all
   select d.parent, s.child, d.Date, d.level + 1
     from descendants as d
  join #source s
    on d.descendant = s.Parent
    where s.Child &lt;&gt; s.Parent
) 
select *
from descendants 

order by parent, level, descendant
option (maxrecursion 0) ;

DROP TABLE #source;