说在前面
你可能看过lym一年前在csdn上写的(mathcal{O}(log{n}))求解Fibonacci数列前(n)项,现在看来这篇文章真的屑。
不过我们今天不讲这玩意,今天我们讲关于Fibonacci数列的生成函数(又称母函数)和其通项的推导,学过的不用往下看了,这玩意真的很基础。不过没学过生成函数(甚至连通项都不知道是啥)的也建议先补补课再来。
[frac{1}{1 - x} = sum_{i ge 0} x^i
]
关于Fibonacci数列
斐波那契数列是这样的一个数列:(0,1,1,2,3,5,8,cdots)
设(f_n)为它的第(n)项,那么它的递推公式:
[f_n =
egin{cases}
1 & n le 2 \
f_{n - 1} + f_{n - 2} & n > 2
end{cases}
]
生成函数与通项
想必大部分人都知道(f_n = dfrac{1}{sqrt{5}}left[left(dfrac{1 + sqrt{5}}{2}
ight) ^ n - left(dfrac{1 - sqrt{5}}{2}
ight) ^ n
ight])
但是怎么得到的呢?
我们考虑求出其生成函数。
设Fibonacci的生成函数是(F(x)),有
[F(x) = sum_{i ge 1} f_i x^i
]
[xF(x) = sum_{i ge 1} f_i x^{i + 1}
]
[x^2F(x) = sum_{i ge 1} f_i x^{i + 2}
]
显然有(F(x) - xF(x) - x^2F(x) = x)
整理一下发现(F(x) = dfrac{x}{1 - x - x^2})
然后我们就考虑证明(dfrac{x}{1 - x - x^2} = dfrac{1}{sqrt{5}}left[left(dfrac{1 + sqrt{5}}{2}
ight) ^ n - left(dfrac{1 - sqrt{5}}{2}
ight) ^ n
ight])
这玩意太好整了啊。
考虑配方。
[{1 - x - x^2} = (1 - ax)(1 - bx)
]
解得
[egin{cases}
a = dfrac{1 + sqrt{5}}{2}\
b = dfrac{1 - sqrt{5}}{2}\
end{cases}
]
得
[F(x) = dfrac{x}{left(1 - dfrac{1 - sqrt{5}}{2} cdot x
ight)left(1 - dfrac{1 + sqrt{5}}{2} cdot x
ight)}
]
裂个项,易得
[F(x) = dfrac{1}{sqrt{5}}left[dfrac{1}{1 - dfrac{1 + sqrt{5}}{2} cdot x} - dfrac{1}{1 - dfrac{1 - sqrt{5}}{2} cdot x}
ight]
]
通过一开始我们给的式子,可以求出第(n)项的系数
[f_n = dfrac{1}{sqrt{5}}left(dfrac{1 + sqrt{5}}{2}
ight)^n - dfrac{1}{sqrt{5}}left(dfrac{1 - sqrt{5}}{2}
ight)^n
]
题外话
这玩意还有其他许多神仙方法可以整,包括一些初等的数列知识,高到一些特征向量等,我们只能不断地学习。