首页 > 其他分享 >【剑指Offer】7、斐波那契数列

【剑指Offer】7、斐波那契数列

时间:2023-08-19 23:55:22浏览次数:32  
标签:return 数列 Offer int 斐波 那契

【剑指Offer】7、斐波那契数列

题目描述:

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

解题思路:

斐波那契数列:0,1,1,2,3,5,8........ 总结起来就是:第一项是0,第二项是1,后续第n项为第n-1项和第n-2项之和。

用公式描述如下:

看到这个公式,非常自然的可以想到直接用递归解决。但是这里存在一个效率问题,以求f(10)为例,需要先求出前两项f(9)和f(8),同样求f(9)的时候又需要求一次f(8),这样会导致很多重复计算,下图可以直观的看出。重复计算的结点数会随着n的增加而急剧增加,导致严重的效率问题。

因此,可以不使用递归,直接使用简单的循环方法实现。

编程实现(Java):

    public int Fibonacci(int n) {
        if(n==0)
            return 0;
        if(n==1)
            return 1;
        //return Fibonacci(n-1)+Fibonacci(n-2); //递归只需要这一句
        int first=0,second=1,res=0;
        for(int i=2;i<=n;i++){
            res=first+second;
            first=second;
            second=res;
        }
        return res;
    }

标签:return,数列,Offer,int,斐波,那契
From: https://www.cnblogs.com/bujidao1128/p/17643458.html

相关文章

  • 《剑指Offer》-40-最小的 K 个数
    如果直接调用sortAPI然后要几个打印几个就没意思了,应该是和某个排序的内部过程结合首先排除O(N2)的低效率排序算法,最先想到的其实是堆排序,小根堆,但是需要额外的空间其次像快排、归并这样的也不合适……我想到了可以这样,快排第一轮划分之后,将部分舍去……应该就是这样了,堆排......
  • 剑指 Offer 55 - I. 二叉树的深度(简单)
    题目:classSolution{public:voidtraversal(TreeNode*cur,int&max,intdepth){//max用来记录最长路径长度,depth记录当前路径长度if(!cur)return;depth++;if(depth>max)max=depth;traversal(cur->left,max,depth);......
  • 动态规划--斐波那契数列
    博客地址:https://www.cnblogs.com/zylyehuo/#-*-coding:utf-8-*-#子问题的重复计算--递归方法--执行效率低deffibnacci(n):ifn==1orn==2:return1else:returnfibnacci(n-1)+fibnacci(n-2)#print(fibnacci(100))......
  • 剑指 Offer 54. 二叉搜索树的第k大节点
    方法一:由于是有序的平衡二叉树,因此是中序。根据dfs中序迭代求得递增排序后,再反转就可求得结果。classSolution{public:vector<int>tmp;intkthLargest(TreeNode*root,intk){//if(root!=NULL)returndfs(root);reverse(tmp.be......
  • 剑指 Offer 36. 二叉搜索树与双向链表
    本题比较重要的有两点:1.一般认为有序的二叉搜索树,都是中序遍历。2.中序遍历的递归顺序,得到的就是排好序的,就是链表的顺序,因此只需管遍历的过程中的链表指向即可。classSolution{public://pre将来指向尾节点,head指向头节点Node*pre=nullptr,*head=nullptr;......
  • 剑指 Offer 16. 数值的整数次方(中等)
    题目classSolution{public:doubletraversal(doublex,intn){if(n==0)return1.00000;doubley=traversal(x,n/2);//本题需要对递归时的指数进行二分法,否则超时。returnn%2==0?y*y:y*y*x;//y=(x^4)。n=8,则x^8=y*y;n......
  • 剑指 Offer 34. 二叉树中和为某一值的路径
    dfsclassSolution{public:vector<vector<int>>res;vector<int>tmp;voiddfs(TreeNode*node,inttarget){if(node==nullptr)return;target-=node->val;tmp.emplace_back(node->val);......
  • 【剑指Offer】61、序列化二叉树
    【剑指Offer】61、序列化二叉树题目描述:请实现两个函数,分别用来序列化和反序列化二叉树。解题思路:序列化是指将结构化的对象转化为字节流以便在网络上传输或写到磁盘进行永久存储的过程。反序列化是指将字节流转回结构化的对象的过程,是序列化的逆过程。受第4题:重建二叉树的启......
  • 【剑指Offer】62、二叉搜索树的第k个结点
    【剑指Offer】62、二叉搜索树的第k个结点题目描述:给定一棵二叉搜索树,请找出其中的第k小的结点。例如(5,3,7,2,4,6,8)中,按结点数值大小顺序第三小结点的值为4。解题思路:本题实际上比较简单,主要还是考察对树的遍历的理解,只要熟练掌握了树的三种遍历方式及其特点,解决本题并不复杂,很明显......
  • 剑指 Offer 07. 重建二叉树(中等)
    题目:classSolution{//本题思路:利用中序遍历,从前序遍历中找到左、右子树的根节点public:unordered_map<int,int>dic;//创建字典,映射当前根节点在中序遍历中的位置,以便于划分当前根节点的左右子树vector<int>preorder;//即下面的this->preorder......