Ever since I started programming this has been something I have been curious about. But seems too complicated for me to even attempt.
I’d love to see a solution.
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)
What you want to do is called polynomial interpolation. There are many methods (see http://en.wikipedia.org/wiki/Polynomial_interpolation ), but you have to have an upper bound U on the degree of the polynomial and at least U + 1 values.
If you have sequential values, then there is a simple algorithm.
Given a sequence x1, x2, x3, …, let Delta(x) be the sequence of differences x2 – x1, x3 – x2, x4 – x3, … . If you have consecutive values of a degree n polynomial, then the nth iterate of Delta is a constant sequence.
For example, the polynomial n^3:
To get the next value, fill in another 6 and then work backward.
The restriction on the number of values above ensures that your sequence never becomes empty while performing the differences.