递归时间复杂度:2^n
循环:n
还有一种矩阵的方法:不适用 只是针对性的解法
通过反推,其实它是两个矩阵的乘积得来的
依此类推:
最后可推出:
因此想要求出F(n)的值,只要能求出右边矩阵的n-1次方的值,最后求得两矩阵乘积,取新矩阵的第一行的第一列的值即可,比如n=3时,
可以得知F(3)的值2,F(2)的值为1,因为幂运算可以使用二分加速,所以矩阵法的时间复杂度为 O(log n)
我们可以用科学计算包 numpy 来实现矩阵法:
import numpy def fib_matr(n): return (numpy.matrix([[1, 1], [1, 0]]) ** (n - 1) * numpy.matrix([[1], [0]]))[0, 0] for i in range(20): print(int(fib_matr(i)), end=" ") >>> 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181