斐波那契序列。奇怪的输出形式(Haskell)

斐波那契序列。奇怪的输出形式(Haskell),haskell,sequence,fibonacci,Haskell,Sequence,Fibonacci,当我在Haskell中观看Fibobacci序列实现的结果时,我意识到数字的optput中有一些“奇怪”的形式 首先,这是我提出的Haskell代码: fib :: Integer -> [Integer] fib 0 = [0] fib 1 = [0, 1] fib a = (fib' 0 1 [0,1] 1 a) fib' :: Integer -> Integer -> [Integer] -> Integer -> Integer -> [Integ

当我在Haskell中观看Fibobacci序列实现的结果时,我意识到数字的optput中有一些“奇怪”的形式

首先,这是我提出的Haskell代码:

fib :: Integer -> [Integer]
fib 0 = [0]
fib 1 = [0, 1]
fib a = (fib' 0 1 [0,1] 1 a)

fib' :: Integer -> Integer -> [Integer] -> Integer -> Integer -> [Integer]
fib' n1 n2 l cont n 
        | cont == n = l
        | otherwise = (fib' n2 n3 (l++[n3]) (cont+1) n)
             where n3 = n2 + n1
对于类似fib 10的东西,输出将是:[0,1,1,2,3,5,8,13,21,34,55] 然后我想尝试像fib 1000这样的东西,而数字是难以置信的大,所有。。。我看到的是由“,”组成的一些奇怪的省略号,它在列表中的每个整数之间打印出来,例如:

因此,我将输出窗口的大小设为最大,以查看这种奇怪的模式是否仍会重复,答案是肯定的:

我的问题是:

有人知道为什么在列表中的整数之间出现这种模式吗?
它是不是应该更随机,更不像是省略号?

当你开始思考它时,没有什么奇怪的。相邻的斐波那契数具有相似的长度,且长度随序列的增加而增加。因此,假设屏幕大小为30个字符,当前的
F(n)
有29位数字,那么接下来的几个数字的长度可能是:

29, 29, 29, 30, 30, 30, 31, 31, 31
这使您可以向左->稳定->向右移动。

n的斐波那契数

十进制数的长度基本上是以10为底的对数。因此,斐波那契曲线的长度就像n的线性函数一样增长,因为对数和指数相互抵消

因此,如果您将它们打印在一列中,您将看到一条直线。但是你一个接一个地打印它们,所以位置会累积。如果你对一个线性序列求累积和,你会得到一个二次序列

局部而言,每一行包含大约相同数量的斐波那契数,我们称之为k。这意味着两件事:

  • 行号随n线性变化
  • 要计算逗号的实际位置(相对于窗口的左边缘),我们需要取累积“绝对位置”的剩余部分乘以行长度。这相当于(平均)每增加n减去1/k。这种调整是线性的,不会改变位置的二次行为

  • 所以你看到的是一条抛物线——二次函数的图形。

    非常有意义,thanx!另请看。这将是惊人的