Ben*_*ock 10 algorithm numbers sequence
自从我开始编程以来,这一直是我一直很好奇的事情.但对我来说似乎太复杂了甚至尝试.
我很乐意看到解决方案.
1, 2, 3, 4, 5 // returns 6 (n + 1)
10, 20, 30, 40, 50 //returns 60 (n + 10)
10, 17, 31, 59, 115 //returns 227 ((n * 2) - 3)
Run Code Online (Sandbox Code Playgroud)
use*_*792 19
你想要做的是多项式插值.有许多方法(参见http://en.wikipedia.org/wiki/Polynomial_interpolation),但是你必须在多项式的次数上有一个上界U,并且至少有U + 1个值.
如果您有顺序值,那么有一个简单的算法.
给定序列x1,x2,x3,...,令Delta(x)为差分序列x2-x1,x3-x2,x4-x3,.... 如果你有一个n次多项式的连续值,那么Delta的第n次迭代就是一个常数序列.
例如,多项式n ^ 3:
1, 8, 27, 64, 125, 216, ...
7, 19, 37, 61, 91, ...
12, 18, 24, 30, ...
6, 6, 6, ...
Run Code Online (Sandbox Code Playgroud)
要获得下一个值,请填写另一个值,然后向后工作.
6, 6, 6, 6 = 6, ...
12, 18, 24, 30, 36 = 30 + 6, ...
7, 19, 37, 61, 91, 127 = 91 + 36, ...
1, 8, 27, 64, 125, 216, 343 = 216 + 127, ...
Run Code Online (Sandbox Code Playgroud)
对上述值数量的限制可确保在执行差异时,序列永远不会变空.