F=(a,b=a)=>a?(b+~a)*F(--a,b-2)+F(a,b)*++b:+!b
Wypróbuj online!
EnF(n,i)−F(n,i)nF′(n,i)=(−1)nF(n,i)FF′F′(n,i)=(i−n−1)F′(n−1,i−2)+(i+1)F′(n−1,i)
F=(a,b=a)=>a?-F(--a,b)*++b+F(a,b-=3)*(a-b):+!b
Wypróbuj online!
Zaskoczony, że nie znalazłem jeszcze odpowiedzi na JavaScript, więc spróbuję.
sech(x)
Wyjaśnienie
Tn:=tanhn(t)S.n: = s e c hn( t )
renS.retn= ∑i = 0nfa( n , i ) T.n - iS.i + 1
reT.ret= S2)reS.ret= - TS.
reret( TzaS.b)= a T.a - 1( S2)) ( Sb) + b S.b - 1( - TS.) ( Tza)= a T.a - 1S.b + 2- b T.a + 1S.b
b=i+1a=n−i
ddt(Tn−iSi+1)=(n−i)Tn−i−1Si+3−(i+1)Tn−i+1Si+1=(n−i)T(n+1)−(i+2)S(i+2)+1−(i+1)T(n+1)−iSi+1
F(n,i)F(n+1,i+2)F(n+1,i)F(n,i)F(n−1,i−2)F(n−1,i)
F(n,i)=(n−i+1)F(n−1,i−2)−(i+1)F(n−1,i)
F(0,0)=1F(0,i)=0i≠0
Powiązana część kodu a?-F(--a,b)*++b+F(a,b-=3)*(a-b):+!b
jest dokładnie obliczana przy użyciu powyższej formuły rekurencyjnej. Oto podział:
-F(--a,b) // -F(n-1, i) [ a = n-1, b = i ]
*++b // *(i+1) [ a = n-1, b = i+1 ]
+F(a,b-=3) // +F(n-1, i-2) [ a = n-1, b = i-2 ]
*(a-b) // *((n-1)-(i-2)) [ a = n-1, b = i-2 ]
// which is equivalent to *(n-i+1)
T(0)=0S(0)=1EnSn+1dnSdtnF(n,n)
F(0,0)F(n,i)=0i<0iEn=0nin0≤i≤ni=n+1n−i+1=n−(n+1)+1=00≤i≤nF(n,i)=0i>n
Rozszerzenia
Kod można zmodyfikować, aby obliczyć trzy kolejne powiązane sekwencje:
Liczby styczne (46 bajtów)
F=(a,b=a)=>a?F(--a,b)*++b+F(a,b-=3)*(a-b):+!~b
Secant Numbers (45 bytes)
F=(a,b=a)=>a?F(--a,b)*++b+F(a,b-=3)*(a-b):+!b
Euler Zigzag Numbers (48 bytes)
F=(a,b=a)=>a?F(--a,b)*++b+F(a,b-=3)*(a-b):!b+!~b
-i/2
, które ustępują-i
po dodaniu. Pomnóż to przezi
zewnętrzną sumę, a otrzymasz1
.