Thanks for the nice question. It is not very often you find it here.
You can use Common Table Expression for this:
declare @StartDate datetime = '03-Jan-2012',
@EndDate datetime = '20-Feb-2012',
@Interval int = 7
;with cte as(
SELECT @StartDate as StartDate, DateAdd(d, @Interval - 1, @StartDate) as EndDate
UNION ALL
SELECT DateAdd(d, @Interval, c.StartDate) as StartDate, DateAdd(d, @Interval * 2 - 1, c.StartDate) as EndDate
FROM cte c WHERE DateAdd(d, @Interval * 2 - 1, c.StartDate) < @EndDate
)
SELECT * FROM cte
OPTION (MAXRECURSION 0)