这是我的斐波纳契发生器:
package main
import "fmt"
func main() {
for i, j := 0, 1; j < 100; i, j = i+j,i {
fmt.Println(i)
}
}
它正在运作,但我不知道如何改进它,我想了解更多专家方法,谢谢......
答案 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数,理论上,您不能拥有比现有更好的时间复杂度。