F=(a,b=a)=>a?(b+~a)*F(--a,b-2)+F(a,b)*++b:+!b
Cobalah online!
Berlaku untuk semua nilai (sesuai kebutuhan), tetapi tidak untuk secara umum (output untuk odd s.) Kode dimodifikasi untuk mengurangi satu byte dengan mengubah output ke di mana didefinisikan sebagai berikut. Secara khusus, rumus perulangan untuk adalahEnF(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
Cobalah online!
Terkejut belum menemukan jawaban JavaScript, jadi saya akan mencoba.
Kode hanya terdiri dari matematika dasar, tetapi matematika di belakang kode membutuhkan kalkulus. Rumus rekursi berasal dari perluasan turunan dari dari pesanan yang berbeda.sech(x)
Penjelasan
Di sini saya akan menggunakan beberapa notasi yang mudah. Misalkan dan . Lalu kita punyaTn:=tanhn(t)Sn:=sechn(t)
dnSdtn=∑i=0nF(n,i)Tn−iSi+1
Karena dan , kita dapat menyimpulkan bahwadTdt=S2dSdt=−TS
ddt(TaSb)=aTa−1(S2)(Sb)+bSb−1(−TS)(Ta)=aTa−1Sb+2−bTa+1Sb
Misalkan dan , kita dapat menulis ulang relasi di atas sebagaib=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
Yaitu, berkontribusi pada dan . Sebagai hasilnya, kita dapat menulis dalam bentuk dan :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)
dengan kondisi awal dan mana .F(0,0)=1F(0,i)=0i≠0
Bagian terkait dari kode a?-F(--a,b)*++b+F(a,b-=3)*(a-b):+!b
persis menghitung menggunakan rumus perulangan di atas. Berikut rinciannya:
-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)
Karena dan , sama dengan koefisien dalam perluasan , yaitu .T(0)=0S(0)=1EnSn+1dnSdtnF(n,n)
Untuk cabang yang tidak pernah dapat dijangkau, perulangan selalu berakhir pada 0, jadi mana atau adalah ganjil. Yang terakhir, khususnya, menyiratkan bahwa untuk semua odd s. Untuk bahkan benar-benar lebih besar dari , perulangan pada akhirnya dapat memungkinkan terjadi pada beberapa titik, tetapi sebelum langkah itu harus mencapai titik di mana , dan rumus perulangan menunjukkan bahwa nilai harus 0 pada titik itu (karena suku pertama dikalikan dengan , dan suku kedua lebih jauh dari "segitiga" dariF(0,0)F(n,i)=0i<0iEn=0nin0≤i≤ni=n+1n−i+1=n−(n+1)+1=00≤i≤n). Akibatnya, mana . Ini melengkapi bukti validitas algoritma.F(n,i)=0i>n
Ekstensi
Kode dapat dimodifikasi untuk menghitung tiga urutan terkait:
Nomor Tangen (46 byte)
F=(a,b=a)=>a?F(--a,b)*++b+F(a,b-=3)*(a-b):+!~b
Nomor Seri (45 byte)
F=(a,b=a)=>a?F(--a,b)*++b+F(a,b-=3)*(a-b):+!b
Nomor Euler Zigzag (48 byte)
F=(a,b=a)=>a?F(--a,b)*++b+F(a,b-=3)*(a-b):!b+!~b
-i/2
, yang menghasilkan-i
ketika ditambahkan. Kalikan itu dengan bagiani
luar penjumlahan, dan Anda dapatkan1
.