F=(a,b=a)=>a?(b+~a)*F(--a,b-2)+F(a,b)*++b:+!b
Probieren Sie es 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
Probieren Sie es online!
Überrascht, dass ich noch keine JavaScript-Antwort gefunden habe, also werde ich es versuchen.
s e c h (x)
Erläuterung
Tn: = t a n hn( t )Sn: = s e c hn( t )
dnSdtn= ∑i = 0nF( n , i ) Tn - ichSi + 1
Schon seit dTdt= S2 und dSdt= - TSkönnen wir das ableiten
ddt( TeinSb)= a Ta - 1( S2) ( Sb) + b Sb - 1( - TS) ( Tein)= a Ta - 1Sb + 2- b Ta + 1Sb
Lassen b = i + 1 und a = n - iWir können die obige Beziehung umschreiben als
ddt( Tn - ichSi + 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
Das ist, F( n , i ) trägt zu beidem bei F( n + 1 , i + 2 ) und F( n + 1 , i ). Infolgedessen können wir schreibenF( n , i ) bezüglich F( n - 1 , i - 2 ) und F( n - 1 , i ):
F( n , i ) = ( n - i + 1 ) F( n - 1 , i - 2 ) - ( i + 1 ) F( n - 1 , i )
mit anfänglichem Zustand F( 0 , 0 ) = 1 und F( 0 , i ) = 0 woher i ≠ 0.
Der zugehörige Teil des Codes a?-F(--a,b)*++b+F(a,b-=3)*(a-b):+!b
berechnet exakt mit der obigen Wiederholungsformel. Hier ist die Aufteilung:
-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)
Schon seit T( 0 ) = 0 und S( 0 ) = 1, En gleich dem Koeffizienten von Sn + 1 in der Expansion von dnSdtn, welches ist F( n , n ).
Für Zweige, die F( 0 , 0 ) kann nie erreicht werden, die Wiederholungen enden immer bei 0, also F( n , i ) = 0 woher i < 0 oder ichist ungerade. Insbesondere letzteres impliziert diesEn= 0 für alle ungeraden ns. Für geradeichist streng größer als nkann die Wiederholung schließlich ermöglichen 0 ≤ i ≤ n irgendwann passieren, aber vor diesem Schritt muss es einen Punkt erreichen, wo i = n + 1, und die Wiederholungsformel zeigt, dass der Wert an diesem Punkt 0 sein muss (da der erste Term mit multipliziert wird n - i + 1 = n - ( n + 1 ) + 1 = 0, und der zweite Term ist weiter vom "Dreieck" von 0 ≤ i ≤ n). Als Ergebnis,F( n , i ) = 0 woher i > n. Damit ist der Nachweis der Gültigkeit des Algorithmus abgeschlossen.
Erweiterungen
Der Code kann geändert werden, um drei weitere verwandte Sequenzen zu berechnen:
Tangentenzahlen (46 Bytes)
F=(a,b=a)=>a?F(--a,b)*++b+F(a,b-=3)*(a-b):+!~b
Sekantenzahlen (45 Bytes)
F=(a,b=a)=>a?F(--a,b)*++b+F(a,b-=3)*(a-b):+!b
Euler-Zick-Zack-Zahlen (48 Bytes)
F=(a,b=a)=>a?F(--a,b)*++b+F(a,b-=3)*(a-b):!b+!~b
-i/2
, die sich ergeben,-i
wenn sie hinzugefügt werden. Multiplizieren Sie das mit demi
Äußeren der Summe, und Sie erhalten1
.