最近在查阅斐波那契数列时,看到下面的文章,总结得非常好,于是自己上手使用 Python 练习并实现多种求解方法
守望:面试官问你斐波那契数列的时候不要高兴得太早zhuanlan.zhihu.com斐波那契数列的定义:
斐波那契数列 又称黄金分割数列,指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........ 这个数列从第3项开始,每一项都等于前两项之和
根据定义递归求解
已知:Fib(0) = 0,Fib(1) = 1
Fib(n) = Fib(n-1) + Fib(n-2)
# 根据定义递归求解
def Fib_definition(n):
# 检查输入
if check_input(n):
if (n <= 1): return n
return Fib_definition(n - 1) + Fib_definition(n - 2)
# 默认返回值
else:
return -1
递归求解,避免重复计算已经出现过的元素
我们都知道,根据定义递归求解,会存在大量的重复计算,于是我们将已经计算过的值保存在数组里,这样在后续需要计算时可以直接使用已经计算过的值,避免重复计算
# 递归求解,避免重复计算已经出现过的元素
def Fib_definition_notRepeat(n, fib_arr = [0, 1]):
if check_input(n):
# 检查输入
if n < 2: return fib_arr[n]
else:
# 填充数组
for x in range(n):
fib_arr.append(-1)
# 当求得 fib_arr[n-1] 时,fib_arr[n-2] 已知
fib_arr[n] &#