Problem description
Write a function to caculate the formula

My solutions
Solution 1:
expBreak[n_Integer] := Which[
n == 1, Sqrt[2],
n >= 2, (Product[
((2^(n - 1) + 2 i + 1)^2 - 1)/
(2^(n - 1) + 2 i + 1)^2, {i, 0, 2^(n - 2) - 1}])^(1/2^n)]
expHalf[n_Integer ] := Product[expBreak[i], {i, 1, n}]
Timing @ (expHalf[20] 2 // N)
{113.896 second, 2.71828}
Solution 2:
numeratorList[n_] :=
(Most@Riffle[Table[2 i, {i, 1, 2^(n - 1)}],
Table[2 i, {i, 1, 2^(n - 1)}]])[[2^(n - 1) ;; 2^n - 1]]
denominatorList[n_] :=
(Rest@Riffle[Table[2 i - 1, {i, 1, 2^n}],
Table[2 i - 1, {i, 1, 2^n}]])[[2^(n - 1) ;; 2^n - 1]]
exphalf[n_] :=
Product[(Times @@ numeratorList[i]/Times @@ denominatorList[i])^(1/2^
i), {i, 1, n}]
Timing @ (exphalf[20] 2 // N)
{95.659 second, 2.71828}
So my question is how to revise it and make it more efficient?

expis a function.eis what you are calculating. – Kuba Oct 03 '13 at 06:08