生成前 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)
这为您提供了简化的公式,无需循环即可计算。
我很难理解这个问题的解决方案:
我们要编写一个函数来生成前 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)
这为您提供了简化的公式,无需循环即可计算。