求Fibonacci数的几种方法
先给出Fibonacci的定义:
简单地总结了下,至少有5中方法来求Fibonacci(n)。
- 直接带公式
- 简单递归
- 循环
- 改进的递归
- 使用矩阵
这里主要介绍下如何用矩阵来求F(n)。
直接公式
简单递归
循环
改进的递归
使用矩阵
首先,我们要构造出一个合适的矩阵运算式。下面是其中一种选择方案:
很显然,这是一个递归定义式。我们可以进一步进行转化。
我们可以看到,F(n)事实上就等于上述公式中第二个矩阵n-1次幂后下标为(0,0)的元素值。现在的问题转化到如何快速地求解矩阵的幂运算。可以参考之前的一篇Blog:Exponentiation 的 O(logn) 算法。那么我们可以设计一个快速的矩阵幂运算实现方式。
其中的Square和Product函数很好实现。那么,求解斐波那契的矩阵实现可以写成:
关于上面介绍的矩阵运算,可以很好的运用到HDU1005和ZJUT1026。参考解答可以在HDU1005和ZJUT1026找到。
posted on 2009-03-14 20:37 wpcockroach 阅读(374) 评论(0) 编辑 收藏 举报