Fibonacci序列时间和空间复杂度

时间:2018-04-14 14:51:08

标签: python big-o

这不是获得Fibonacci序列号的最有效方法,但我正在学习Big O,并希望确认和解释下面代码的空间和时间效率。代码是在Python中,我编写它,以便我使用一个列表并附加到它,只返回最后一个值。

append方法需要O(1)时间,如here所示,但我的操作几乎是n次,所以我会得到O(n)的时间复杂度?

关于空间复杂性,我是否应该将空间视为arithmetic series,因为如果输入的数字大于开头时给予函数堆栈的数量,则必须将列表移动到其他地方? / p>

question中的代码用于递归方法。

def getFib(position):
  if position == 0:
    return 0
  if position == 1:
    return 1

  list_ = [0, 1]
  previous = 1

  for pos in range(2, position+1):
    list_.append(list_[pos-1] + list_[pos-2])

  return list_[position]

if __name__ == "__main__":
  print(getFib(0))
  print(getFib(1))
  print(getFib(2))
  print(getFib(3))
  print(getFib(4))
  print(getFib(5))
  print(getFib(6))
  print(getFib(7))
  print(getFib(8))
  print(getFib(9))

1 个答案:

答案 0 :(得分:1)

时间复杂度:O(n)因为您正在执行具有恒定时间复杂度的循环n次。

空间复杂度:O(n)因为您在列表中存储了n个号码。

当然,您并不需要存储所有数字,只能存储最后两个数值。这会将空间复杂度降低到O(1)