2

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

我们将编写一个函数来生成前 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]

有人可以解释一下这个想法是如何产生的吗?我知道这是一个动态编程问题,我只是不明白如何自己想出这个公式。那么在高层次上,你到底是怎么想的呢?

4

1 回答 1

4

我们知道:

BN(i)     = BN(i-1) + BN(i-2) +     ...       + BN(i-N)

这意味着

BN(i-1)             = BN(i-2) + BN(i-3) + ... + BN(i-N) + BN(i-N-1)

我在那里所做的一切都是在定义中的替代i-i品。i

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

BN(i-1) - BN(i-N-1) = BN(i-2) + BN(i-3) + ... + BN(i-N)

现在,我将这个等式代入第一个。(你可以看到这个等式的右边正好是第一个等式的尾部,所以我可以替换这个等式的左边。)

BN(i)     = BN(i-1) + BN(i-1) - BN(i-N-1) 

这为您提供了简化的公式,可以在没有循环的情况下对其进行评估。

于 2020-08-17T04:05:41.997 回答