斐波那契数–递归方法
斐波那契数数列由意大利人斐波那契(Leonardo Fibonacci)最早研究。
斐波那契数,通常用Fib(n)表示形成的序列称为斐波那契数列
# 斐波纳契数列 -- 递归
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n - 1) + fib(n - 2)
# 斐波纳契数列--使用数组
# 使用动态规划法,时间复杂度和空间复杂度优化至O(n)
def fib_n(n):
a = [0] * (n + 1)
a[1] = 1
for i in range(2, n + 1):
a[i] = a[i - 1] + a[i - 2]
return a[n]
使用矩阵乘法
# 斐波纳契数列--矩阵乘法
import numpy as nu
import numpy.linalg as lin
def fib_nu(n):
a = nu.array([1, 1, 1, 0], dtype=nu.int64)
a = a.reshape(2, 2)
return lin.matrix_power(a, n - 1)[0, 0]
obj = fib_nu(9864)
print(obj)
爬楼梯
def climb_stairs(n):
a = [1] * (n + 1)
a[2] = 2
for i in range(3, n + 1):
a[i] = a[i - 1] + a[i - 2] + a[i - 3]
return a[n]
转载:文献参考《高效制胜-程序员面试典型题解》吴江编著