OFFSET
0,9
COMMENTS
Using polygonal numbers as weights, a recursion for triangles is defined, whose main diagonals represents a family of sequences, which include, among others, the powers of 2, the double factorial of odd numbers, the reduced tangent numbers, and the Euler numbers.
Apart from the edge cases k = 0 and k = n the recursion is T(n, k) = w(n, k) * T(n, k - 1) + T(n - 1, k). T(n, 0) = 1 and T(n, n) = T(n, n-1) if n > 0.
The weights w(n, k) identical to 1 yield the recursion of the Catalan triangle A009766 (with main diagonal the Catalan numbers). Here the polygonal numbers are used as weights in the form w(n, k) = p(s, n - k + 1), where the parameter s is the number of sides of the polygon and p(s, n) = ((s-2) * n^2 - (s-4) * n) / 2, see A317302.
LINKS
Wikipedia, Polygonal number.
EXAMPLE
Array A(n, k) starts: (polygon|diagonal|triangle)
[8] 1, 1, 9, 249, 14001, 1322001, 188106489, ... A000567
MAPLE
poly := (s, n) -> ((s - 2) * n^2 - (s - 4) * n) / 2:
T := proc(s, n, k) option remember; if k = 0 then 1 else if k = n then T(s, n, k-1) else poly(s, n - k + 1) * T(s, n, k - 1) + T(s, n - 1, k) fi fi end:
for n from 0 to 8 do A := (n, k) -> T(n, k, k): seq(A(n, k), k = 0..9) od;
# Alternative, using continued fractions:
A := proc(p, L) local CF, poly, k, m, P, ser;
poly := (s, n) -> ((s - 2)*n^2 - (s - 4)*n)/2;
CF := 1 + x;
for k from 1 to L do
m := L - k + 1;
P := poly(p, m);
CF := 1/(1 - P*x*CF)
od;
ser := series(CF, x, L);
seq(coeff(ser, x, m), m = 0..L-1)
end:
for p from 0 to 8 do lprint(A(p, 8)) od;
MATHEMATICA
poly[s_, n_] := ((s - 2) * n^2 - (s - 4) * n) / 2;
T[s_, n_, k_] := T[s, n, k] = If[k == 0, 1, If[k == n, T[s, n, k - 1], poly[s, n - k + 1] * T[s, n, k - 1] + T[s, n - 1, k]]];
A[n_, k_] := T[n, k, k];
Table[A[n - k, k], {n, 0, 10}, {k, 0, n}] // Flatten (* Jean-François Alcover, Nov 27 2023, from first Maple program *)
PROG
(Python)
from functools import cache
@cache
def T(s, n, k):
if k == 0: return 1
if k == n: return T(s, n, k - 1)
p = (n - k + 1) * ((s - 2) * (n - k + 1) - (s - 4)) // 2
return p * T(s, n, k - 1) + T(s, n - 1, k)
def A(n, k): return T(n, k, k)
for n in range(9): print([A(n, k) for k in range(9)])
(PARI)
A(p, n) = {
my(CF = 1 + x,
poly(s, n) = ((s - 2)*n^2 - (s - 4)*n)/2,
m, P
);
for(k = 1, n,
m = n - k + 1;
P = poly(p, m);
CF = 1/(1 - P*x*CF)
);
Vec(CF + O(x^(n)))
}
for(p = 0, 8, print(A(p, 8)))
\\ Michel Marcus and Peter Luschny, Oct 02 2023
CROSSREFS
KEYWORD
nonn,tabl
AUTHOR
Peter Luschny, Sep 30 2023
STATUS
approved