一个斐波那契数列算法

面试现场的解决方案

这是我的笔试临场发挥,写的有点low。

def fib(n):
    i,a,b = 1, 0, 1
    while True:
      if i < n:
        a, b = b, a+b
        i += 1
      else:
        return b

思考:循环判断条件是不是可以优化?

def fib(n):
    i,a,b = 1, 0, 1
    while i < n:
        a, b = b, a+b
        i += 1
    return b

后来我又想,a, b = b, a+b,这一步分开赋值该怎么搞,于是:

# a, b 分开赋值
def fib(n):
    i,a,b = 1, 0, 1
    while i< n:
        temp = a + b
        a = b
        b = temp
        i += 1
    return b

# 说明:这里必须要用一个中间变量来存储新推倒出来的值: a+b

使用for循环方式

# 迭代 斐波那契
def fib(n):
    a,b = 1,1
    for i in range(n-2):
        a,b = b, a+b
    return b

使用递归方式

# 递归 斐波那契
def fib(n):
    if n <= 2:
        return 1
    return fib(n - 1) + fib(n - 2)

Enjoy your code, good luck.

posted @ 2020-04-25 09:39  Deacone  阅读(124)  评论(0编辑  收藏  举报