Ваш подход очень хорош, за исключением того, что вы, похоже, допустили простую ошибку индексации. Если вы подумаете о том, что представляют собой индексы i
и j
, и во что преобразует внутренний цикл arr[j]
, вы поймете это достаточно легко (я лгу, мне потребовалось добрых полчаса, чтобы выяснить, что было чем :.))
Из того, что я могу декодировать, i
представляет значение k
во время вычислений, а arr[j]
преобразуется из S(i+j, i-1)
в S(i+1+j, i)
. Самый верхний цикл for, который инициализирует arr
, устанавливает его как S(1+j, 1)
. Согласно этим циклам, вычисления выглядят просто отлично. За исключением одного: самый первый цикл i
предполагает, что arr[j]
содержит S(0+j, 0)
, и именно в этом заключается ваша проблема. Если вы измените начальное значение i
с 1
на 2
, все должно быть в порядке (вам может потребоваться if или два для крайних случаев). Первоначальный i=2
преобразует arr[j]
из S(1+j, 1)
в S(2+j, 2)
, а остальные преобразования будут в порядке.
Кроме того, вы могли бы инициализировать arr[j]
до S(0+j, 0)
, если бы он был определен, но, к сожалению, числа Стерлинга не определены в k=0
.
РЕДАКТИРОВАТЬ: Очевидно, я был неправ в моем последнем комментарии. Если вы инициализируете arr в {1, 0, 0, ...}, вы можете оставить начальное значение i
как 1
. Для этого вместо него используются начальные значения S(0, 0)=1
и S(n, 0)=0, n>0
.