本文主要是介绍[LeetCode]每日一题509:斐波那契数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
看题:斐波拉契数,LeetCode原题
斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给你 n ,请计算 F(n) 。
示例 1:
输入:2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1
示例 2:
输入:3
输出:2
解释:F(3) = F(2) + F(1) = 1 + 1 = 2
示例 3:
输入:4
输出:3
解释:F(4) = F(3) + F(2) = 2 + 1 = 3
提示:0 <= n <= 30
需求分析
这是经典的一道练习题,实现的方式有很多种,作为测试可能首先想到的不是实现,而是测试
1、不用考虑负数
2、从0开始
3、提示区间
解题思路
递归,是的,就是函数递归<< span="">程序调用自身的编程技巧称为递归>
代码实现
class Solution: def fib(self, n: int) -> int: if n<2:return n if n==2: return self.fib(n-1) elif n>2: x= self.fib(n-1)+self.fib(n-2) return x
执行代码结果:
代码分析
这个代码很繁琐,条件看起来就是比较糟糕,条件有重复;递归算法解题相对常用的算法如普通循环等,运行效率较低。
优化过程
作者想过在原来的代码基础优化,无非就是删减代码,最后精简
class Solution: def fib(self, n: int) -> int: if n<2:return n return self.fib(n-1)+self.fib(n-2)
但是执行效率如下:
看到这个用时,那还有优化的空间吗?
算法优化
class Solution:def fib(self, n: int) -> int:if n <2:return nper1=0per2=0rev=1x=2while x<=n:per1=per2per2=revrev=per1+per2x+=1return rev
执行结果如下
总结
1、如果你能一下子就想到的解决办法,能实现固然不错
2、但是实现效率很低,那么它就是一种很普遍的算法–不是最优
3、那么就需要仔细去分析题目(数据特点)来解决这个题
4、建议可以先试着测试的思维去解决,然后再开始算法思维
这篇关于[LeetCode]每日一题509:斐波那契数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!