結合や再帰的なCTEは必要ありません。標準のギャップアンドアイランドソリューションは、(値からrow_numberを引いた値)でグループ化することです。これは、連続するシーケンス内で不変であるためです。開始日と終了日は、グループのMIN()とMAX()だけです。
WITH t AS (
SELECT InfoDate d,ROW_NUMBER() OVER(ORDER BY InfoDate) i
FROM @d
GROUP BY InfoDate
)
SELECT MIN(d),MAX(d)
FROM t
GROUP BY DATEDIFF(day,i,d)