Bessel function recurrence

Clear[Jlist];
Jlist[nmax_,x_]:=Table[BesselJ[n,x],{n,0,nmax}]

Clear[Jup,Juplist];
Juplist[nmax_,x_]:=(
(* use mathematica's (Subscript[J, n])(x) to start the recurrence; but even with that cheat, the recurrence is no good *)
Jup[0,x]=BesselJ[0,x];
Jup[1,x]=BesselJ[1,x];
Do[Jup[n,x]=((2(n-1))/x)Jup[n-1,x]-Jup[n-2,x],{n,2,nmax}];
Table[Jup[n,x],{n,0,nmax}]
)

Clear[Jdown,Jdownsum,Jdownlist];
Jdownlist[nmax_,x_]:=(
(* start recurrence with arbitrary values; as long as the recurrence is started from n ≫ |x|, the stable recurrence locks on to the correct, growing solution *)
Jdown[nmax+2,x]=0;
Jdown[nmax+1,x]=1;
Do[Jdown[n,x]=((2(n+1))/x)Jdown[n+1,x]-Jdown[n+2,x],{n,nmax,0,-1}];
(* scale using 1 = (Subscript[J, 0])(x) + 2((Subscript[J, 2])(x) + (Subscript[J, 4])(x) + ...) *)
Jdownsum=Jdown[0,x]+2Sum[Jdown[n,x],{n,2,nmax+2,2}];
Do[Jdown[n,x]/=Jdownsum,{n,0,nmax+2}];
Table[Jdown[n,x],{n,0,nmax}]
)

(* Mathematica's Bessel function J[n,x], n = 0 to 10, x = 0.1 *)
N[Jlist[10,.1]]

(* Upward recursion of J[n,x] is unstable *)
N[Juplist[10,.1]]

(* Downward recursion of J[n,x] is stable *)
N[Jdownlist[10,.1]]