Intentaría reescribir el CTE para eliminar uno de los pasos, es decir,
;cte as (
select a.first_num, a.second_num, a.first_num as first_key, 1 as sequence_count
from T_SEQ_FF a where not exists (select 1 from T_SEQ_FF b where a.first_num = b.second_num)
union all
select a.first_num, a.second_num, cte.first_key, cte.sequence_count + 1
from T_SEQ_FF a
inner join cte on a.first_num = cte.second_num
)
select *
from cte
option (maxrecursion 0);
Si solo hay un elemento raíz, sería mejor pasarlo a la consulta como una variable para que el optimizador de consultas pueda usar el valor.
Otra cosa que puede intentar es cambiar la consulta para obtener los elementos raíz sin una subconsulta, es decir, second_num es nulo o first_num =second_num.