剑指offer 面试题10 (斐波那契数列) python

题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。

n<=39

 

 

代码(1):

# -*- coding:utf-8 -*-

class Solution:

    def Fibonacci(self, n):

        # write code here

        if n == 1:

            return 1

        elif n == 0:

            return 0

        else:

            return self.Fibonacci(n-1)+self.Fibonacci(n-2)解题思路:

解题思路:递归,但是效率很慢,面试时候也不会有好消息。

递归可以实现但是效率慢,是因为他不断重复计算了很多东西。

举个栗子:

F(5)

F(4)   + F(3)

F(3)   + F(2) F(2)   + F(1)

F(2)  +F(1) F(1) +F(0) F(1) +  F(0) 1

1+0   1     1     0     1       0

我们可以发现:

计算次数

F(4)

1

F(3)

2

F(2)

3

F(1)

4

F(0)

2

 

代码(2):

# -*- coding:utf-8 -*-

class Solution:

    def Fibonacci(self, n):

        # write code here

        F_list = [0,1]

        for i in range(2,n+1):

            F_list.append(F_list[i-1]+F_list[i-2])

        return F_list[n]

 

 

解题思路:如果  我们 把多余的计算量去掉,就会提升很多。把计算结果存起来,但是空间复杂度就变了。

 

 

 

 

 

代码三(偷鸡):

# -*- coding:utf-8 -*-
class Solution:
    def Fibonacci(self, n):
        # write code here
        a = 0
        b = 1
        for i in range(2,n+1):
            a , b = b , a+b
        if n == 0:
            return 0
        else:
            return b

 

 

 剑指offer 面试题9 (用两个栈实现队列) python

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值