剑指offer-JZ7 斐波那契数列 Fibonacci
难度:入门
题目描述:
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。
思路:
1.最容易想到的是递归,但是分析发现递归的时间复杂度非常高,2^n
2.找规律,用循环,创建中间变量来保存前一轮的结果,在下一轮之中直接取用
# -*- coding:utf-8 -*- class Solution: def Fibonacci(self, n): # write code here '''if n == 0: return 0 if n == 1: return 1 if n >1: num = self.Fibonacci( n-1)+self.Fibonacci( n-2) return num return None #判断时不是负数,因为体重要求的是整数,没有说一定是整数 ''' # 如果按照递归来写的话,时间复杂度的增长为(2**n) 因为每个数都会被分为两个,然后不断分解 # 递归 首先 要理解斐波那契数列 # 0 1 1 2 3 5 8 13 # n=0 num =0 # n=1 num = 1 # n=2 num =1 # '''''' # 当n=k(k>1) 的时候,f(k)=f(k-1)+f(k-2) # 当n=1 ,f(1) =1 当n=0,f(0)=0 # 保留中途计算过的结果,用于之后的计算 # 通过循环来做 if n == 0: return 0 if n == 1: return 1 a = 1 b = 0 ret = 0 for i in range(0,n-1): ret = a + b b = a a = ret return ret # if n > 1: #当n=2 h = 0+1 初始化 a=0 b =1