去Fibonacci序列生成器

时间:2013-07-11 22:02:53

标签: go

这是我的斐波纳契发生器:

package main

import "fmt"

func main() {
    for i, j := 0, 1; j < 100; i, j = i+j,i {
        fmt.Println(i)
    }
}

它正在运作,但我不知道如何改进它,我想了解更多专家方法,谢谢......

1 个答案:

答案 0 :(得分:2)

我假设你在谈论提高时间复杂度(而不是代码复杂性)。

您的解决方案在O(n)时间内计算斐波纳契数。有趣的是,也存在O(log n)解决方案。

算法很简单:使用Divide and Conquer方法找出矩阵A的n次方并报告第(0,0)个元素,其中

 A = |1     1 |
     |1     0 |

递归

 A^n = A^(n/2) * A^(n/2)

时间复杂度:

T(n) = T(n/2) + O(1) = O(logn)

如果你用一张纸来考虑它,你会发现证据很简单并且基于归纳原理。 如果您仍需要帮助,请参阅this link

注意:当然,只有当你想要找到第n个Fibonacci数时,O(logn)时间才为真。但是,如果您打算打印所有 n fib数,理论上,您不能拥有比现有更好的时间复杂度。