我想知道是否有可能处理一组数字,例如:
lst = [1, 1, 2, 3, 5, 8, 13, 21, 34]
并创建一个算法来找出模式: F(n) = F(n-1) + F(n-2)
,然后继续添加下一个数字:
lst.append(x) # x being the next number which is 55
可能是一种可应用于任何数字列表的算法。
我想知道是否有可能处理一组数字,例如:
lst = [1, 1, 2, 3, 5, 8, 13, 21, 34]
并创建一个算法来找出模式: F(n) = F(n-1) + F(n-2)
,然后继续添加下一个数字:
lst.append(x) # x being the next number which is 55
2, 4, 6, 8, 10, 12, 14
,接下来的几个数字会是什么?你可能会说答案是16, 18, 20
等,因为你使用方程f(n) = 2*n
,其中n
是项目位置(从1开始)。注意,形式为f(n) = [(n-1)*(n-2)*(n-3)*(n-4)*(n-5)*(n-6)*(n-7) * g(n)] + 2*n
的方程有无限多个。n = 1..7
时的正确值,而第一项只能在 n
取某些值时得到 0
。因此,在第一项中,你可以选择任何有限范围的函数作为最后一个 g(n)
乘数,并从 n=8
开始获得任何想要的值。g(n) = 20*n
,
f(n) = (n-1)*(n-2)*(n-3)*(n-4)*(n-5)*(n-6)*(n-7) * 20 * n + 2*n
将得到以下列表:2, 4, 6, 8, 10, 12, 14, 806416
因此,你所描述的问题是无法解决的。f(n)
是一个一次多项式(线性方程),这将减少可能性并给出f(n) = 2 * n
。其中一些方法在机器学习中传统地被使用,尤其是线性和逻辑回归。1, 1, 2, 3, 5, 8, 13, 21, 34
后面的数字,并声称它们是55、89、144...。大多数人都同意你的说法,认为这是一个斐波那契数列。ceil(e^(n-1)/2))
。F(n) = F(n-1) + F(n-2) + F(n-9)
。写一个程序,你会发现起始元素是一样的。再来一个吧:F(n) = F(n-1) + F(n-2) - 4 * F(n-9) + F(n - 17)
。虽然在数学中可以定义这样的序列,假设以下值,但这需要一位聪明的数学家来进行计算。
当然,您可以编写一个具有某些“硬编码”模式检测的函数,但它可能不正确。因为那只是一个列表,下一个值很可能是12,即使上下文使其看起来像斐波那契数列。
如果您需要生成斐波那契数列,请考虑使用生成器函数:
def fib(n):
# generate the first n Fibonacci numbers
i = 0
last = 0
current = 1
while i < n:
yield current
temp = current + last
last = current
current = temp
i += 1
print(list(fib(42)))
。 - user530873