Probably not a valid solution, but fun anyway:
function SFibNtuple(::Val{S}) where S
val_i_minus_2 = Ref(1)
val_i_minus_1 = Ref(1)
tup = ntuple(S) do i
if i == 1 || i == 2
1
else
val = val_i_minus_2[] + val_i_minus_1[]
val_i_minus_2[] = val_i_minus_1[]
val_i_minus_1[] = val
end
end
SVector(tup)
end
This infers up to Val(10)
.
using BenchmarkTools
@btime SFibNtuple(Val(10));
prints 1.702 ns (0 allocations: 0 bytes)
.