生成前 M 个 N-Bonacci 数的数组

Generate an array of the first M N-Bonacci Numbers

我很难理解这个问题的解决方案:

我们要编写一个函数来生成前 M 个 N-Bonacci 数。因此,例如,如果 N = 2,则这是斐波那契数列 {0, 1, 2, 3, 5 ... }。如果N = 3,则每个元素都是前面3个数的和,{0, 0, 1, 1, 2, 4, 7, ... }。

根据本题的解,第i个N-Bonacci数,等于

nbonacci[i] = nbonacci[i - 1] + nbonacci[i - 1] - nbonacci[i - N - 1]

谁能解释一下这个想法是如何产生的?我知道这是一个动态规划问题,我只是不明白如何自己想出这个公式。那么在较高的层面上,您对此有何看法?

我们知道:

B<sub>N</sub>(i)     = B<sub>N</sub>(i-1) + B<sub>N</sub>(i-2) +     ...       + B<sub>N</sub>(i-N)

也就是说

B<sub>N</sub>(i-1)             = B<sub>N</sub>(i-2) + B<sub>N</sub>(i-3) + ... + B<sub>N</sub>(i-N) + B<sub>N</sub>(i-N-1)

我所做的只是用 i-i 代替定义中的 i

换句话说(等式两边减去最后一项):

B<sub>N</sub>(i-1) - B<sub>N</sub>(i-N-1) = B<sub>N</sub>(i-2) + B<sub>N</sub>(i-3) + ... + B<sub>N</sub>(i-N)

现在,我将这个等式代回第一个。 (你可以看到这个等式的 right-hand 边正好是第一个等式的尾部,所以我可以替换这个等式的 left-hand 边。)

B<sub>N</sub>(i)     = B<sub>N</sub>(i-1) + B<sub>N</sub>(i-1) - B<sub>N</sub>(i-N-1) 

这为您提供了简化的公式,无需循环即可计算。