斐波那契查找(感觉不到速度可能自己太菜)

C语言----斐波那契数列(附源代码) 各位看官们好,当我写了上一篇博客杨辉三角后,有一些看官叫我讲一下斐波那契数列。对于这个大家应该是有了解的。最简单的规律就是f(n)=f(n-2)+f(n-1)。就是当前是前两项之和,然后下标1和0都是1.从第三项开始计算的。那么我们知道规律,那么我们就直接来讲讲如何实现和实现方法有哪些吧。 阅读详情
package com.search;

import java.util.Arrays;

/**
 * @Auther: 大哥的叔
 * @Date: 2019/8/10 12:15
 * @Description:
 */
public class FibonacciSearch {

    public static int maxSize = 20;
    public static void main(String[] args) {
        int [] arr = {1,8, 10, 89, 1000, 1234};

        System.out.println("index=" + fibSearch(arr, 89));// 0

    }

    //因为后面我们mid=low+F(k-1)-1,需要使用到斐波那契数列,因此我们需要先获取到一个斐波那契数列
    //非递归方法得到一个斐波那契数列
    public static int[] fib(){
        int[] f = new int[maxSize];
        f[0]=1;
        f[1]=1;
        for (int i = 2; i < maxSize; i++) {
            f[i]=f[i-1]+f[i-2];
        }
        return f;
    }

    public static int fibSearch(int[] a,int key){
        int low = 0;
        int high = a.length-1;
        int k = 0;//表示斐波那契分割数值的下标
        int mid = 0;
        int f[] = fib();//获取到斐波那契数列
        while (high>f[k]-1){
            k++;
        }
        //因为 f[k] 值 可能大于 a 的 长度,因此我们需要使用Arrays类,构造一个新的数组,并指向temp[]
        //不足的部分会使用0填充
        int[] temp = Arrays.copyOf(a,f[k]);
        //实际上需求使用a数组最后的数填充 temp
        //举例:
        //temp = {1,8, 10, 89, 1000, 1234, 0, 0}  => {1,8, 10, 89, 1000, 1234, 1234, 1234,}
        for(int i = high + 1; i < temp.length; i++) {
            temp[i] = a[high];
        }

        // 使用while来循环处理,找到我们的数 key
        while (low <= high) { // 只要这个条件满足,就可以找
            mid = low + f[k - 1] - 1;
            if(key < temp[mid]) { //我们应该继续向数组的前面查找(左边)
                high = mid - 1;
                //为甚是 k--
                //说明
                //1. 全部元素 = 前面的元素 + 后边元素
                //2. f[k] = f[k-1] + f[k-2]
                //因为 前面有 f[k-1]个元素,所以可以继续拆分 f[k-1] = f[k-2] + f[k-3]
                //即 在 f[k-1] 的前面继续查找 k--
                //即下次循环 mid = f[k-1-1]-1
                k--;
            } else if ( key > temp[mid]) { // 我们应该继续向数组的后面查找(右边)
                low = mid + 1;
                //为什么是k -=2
                //说明
                //1. 全部元素 = 前面的元素 + 后边元素
                //2. f[k] = f[k-1] + f[k-2]
                //3. 因为后面我们有f[k-2] 所以可以继续拆分 f[k-1] = f[k-3] + f[k-4]
                //4. 即在f[k-2] 的前面进行查找 k -=2
                //5. 即下次循环 mid = f[k - 1 - 2] - 1
                k -= 2;
            } else { //找到
                //需要确定,返回的是哪个下标
                if(mid <= high) {
                    return mid;
                } else {
                    return high;
                }
            }
        }
        return -1;
    }
    }


 

TeXstudio完整安装配置教程(2025最新版) 至此,你已经完成了TeXstudio的完整安装和配置!现在你可以:✅ 使用TeXstudio编写LaTeX文档✅ 正确编译中英文混排的文档✅ 掌握基本的编辑和配置技巧LaTeX的学习曲线较陡,但一旦掌握,你会发现它在学术写作中的强大之处。建议从简单的文档开始练习,逐步掌握更高级的功能。祝你LaTeX写作顺利!如果有任何问题,欢迎在评论区留言交流。关键词:TeXstudio安装、LaTeX环境配置、中文LaTeX、TeX Live、学术论文写作更新日期:2025年10月。 阅读详情

相关推荐

3D视觉引导技术在机器人焊接中的应用

通过对比传统的2D视觉和3D视觉技术在焊接领域的应用差异,探讨了3D视觉引导技术在提高焊接精度、适应不规则工件形状和增强自适应能力方面的优势。本文对3D视觉引导技术在机器人焊接中的应用进行了深入探讨,总结了其在提高焊接精度、适应不规则工件形状和增强自适应能力方面的优势,并通过应用案例展示了其在焊接路径规划、焊缝检测和焊接质量控制等方面的重要作用。1. 提高焊接精度:3D视觉引导技术能够精确测量焊接工件的三维形状和位置,为机器人提供精准的焊接路径规划和跟踪,从而提高焊接精度。三、3D视觉引导技术概述。

2302_79273122的博客 1835

斐波那契查找(黄金分割法查找)算法

一、斐波那契查找算法基本思想 斐波那契查找算法又称为黄金分割法查找算法,是一种有序查找算法。 斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、····。在数学上,斐波那契被递归方法如下定义:F(1)=1,F(2)=1,F(n)=f(n-1)+F(n-2) (n>=2)。该数列越往后相邻的两个数的比值越趋向于黄金比例值(0.618)。 斐波那契查找是在二分查找的基础上根据斐波那契数列进行分割。在斐波那契数列找一个等于大于查找表中元素个数的数F(n),将原查找表扩展

qq_44111805的博客 2815

深入解析STM32F40x CAN控制器的配置与优化

本文深入解析STM32F40x CAN控制器的配置与优化,涵盖基础工作模式、波特率计算、筛选器配置及中断管理等关键技术。通过实战案例和代码示例,帮助开发者高效配置CAN通信,提升工业控制系统的稳定性和性能。

weixin_26834815的博客 220

斐波那契(黄金分割法)查找算法--Java数据结构和算法

8.5 斐波那契(黄金分割法)查找算法 8.5.1斐波那契(黄金分割法)查找基本介绍 黄金分割点是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。取其前三位数字的近似值是 0.618。由于按此比例设计的造型十分美丽,因此称为黄金分割,也称为中外比。这是一个神奇的数字,会带来意向不大的效果。 斐波那契数列 {1, 1, 2, 3, 5, 8, 13, 21, 34, 55 } 发现斐波那契数列的两个相邻数 的比例,无限接近 黄金分割值0.618 8.5.2斐波那契(黄金分割法)原

当一个合格的软件工程师 3273

【免费】最新区块链钱包和私钥的助记词碰撞器,使用python开发

最新钱包私钥助记词碰撞器,搏一搏单车变摩托!

weixin_48529185的博客 1万+

老司机避坑指南:UC3842自举驱动电路发热严重?这样选C39/C37电容值最稳

本文针对UC3842自举驱动电路发热严重的问题,深入剖析了驱动波形边沿速度与损耗的矛盾根源。通过实测数据与热成像分析,重点阐述了关键电容C39/C37的选型策略,提供了从经验公式到量化计算的优化方法,帮助工程师在发热与效率间找到最佳平衡点,并探讨了分立方案与专用驱动IC的适用场景。

lambda的博客 747

python贝塞尔插值公式_斐波那契查找原理——附python和C++实现

在正式介绍斐波那契查找之前,首先要知道什么是斐波那契数列:机器学习入坑者:面试被问到斐波那契数列怎么办?——附python和C++实现​zhuanlan.zhihu.com 前面的文章分析了顺序查找、二分查找和插值查找,其中顺序查找的思想最简单,只需要将目标值和数据中每一个值进行比较即可;二分查找每次将区间长度缩减一半;插值查找按照目标值和边界值的关系确定区间分割方式。 斐波...

weixin_39899630的博客 499

从零到一:鲲鹏920服务器上的DeepSeek模型部署全流程解析

本文详细解析了在华为鲲鹏920服务器上部署DeepSeek模型的全流程,包括环境准备、模型服务框架部署、性能优化及生产环境方案。通过ARM架构优化和量化技术,显著提升模型推理效率,适用于企业级AI应用场景,助力国产化技术落地。

weixin_29094775的博客 599

斐波那契(黄金分割法)查找算法

斐波那契(黄金分割法)查找基本介绍 黄金分割点是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。取其前三位数字的近似值是0.618。由于按此比例设计的造型十分美丽,因此称为黄金分割,也称为中外比。这是一个神奇的数字,会带来意向不大的效果。 斐波那契数列 {1, 1, 2, 3, 5, 8, 13, 21, 34, 55 } 发现斐波那契数列的两个相邻数 的比例,无限接近...

方亚军的博客 3967

东方财富网API接口逆向分析:手把手教你破解那个带jQuery回调的股票数据接口

本文详细解析了东方财富网股票数据API接口的逆向工程实战技巧,重点介绍了JSONP接口的核心机制、参数解析及数据处理方法。通过Python代码示例演示了如何构造请求、处理分页数据及应对反爬策略,帮助开发者高效获取股票数据。文章还提供了完整的爬虫实现案例和常见问题排查指南。

weixin_30790841的博客 715

【BigWorld 游戏服务器引擎】Cell 架构设计介绍,及Java实现方案的探索

横向扩展(Scalability):通过动态增减CellApp和BaseApp的数量,可以轻松应对玩家人数的变化。世界可以做得非常大,只需增加更多的 Cell。负载分离(Load Separation):将不同性质的负载分离,避免了单一进程瓶颈。CPU 密集型的实时计算(CellApp)和 I/O 密集型的数据操作(BaseApp)互不影响。高效的视野管理(AOI):每个 Cell 只关心自己区域内和边界上的实体,大大降低了计算复杂度。容错性:某个CellApp。

代码时光 1205

算法:斐波那契(黄金分割法)查找算法

斐波那契数列 斐波那契数列,该数列公式为F(K) = F(k-1) + F(k-2),即 1、1、2、3、5、8、13、21……。F(k-1)/f(K)随着K的递增,该数越来越接近黄金分割比例,所以该方法也叫黄金分割法。 斐波那契查找算法也叫做黄金分割查找 原理 对于一个数组来说,如果数组长度为契波纳切数列中的某一个数字,那么我们就可以用黄金分割比例来分割该数组。当然,如果数组长度没有达到要求,那么我们可以尝试它扩大来满足要求, 其实,该算法的本质也还是二分法,只不过跟插入排序法一样,也是将目标的mid值改

OceanStar的博客 4023

hwasan / asan详细分析踩内存之一:Use after free

UAF漏洞全称为use after free ,即利用已经被free掉的堆块被再次利用,该漏洞的存在是因为程序编写者在free堆块部分没有将该堆块的fd指针改为0,进而导致该堆块可以被申请回来,3.内存块被free后,其对应的指针没有被设置为 NULL,但是在它下一次使用之前,有代码对这块内存进行了修改,那么当程序再次使用这块内存时,就很有可能会出现奇怪的问题。2.堆块free后,对应指针没有被设置为NULL,即还可以调用会该堆块,当我们申请一个比该堆块小于等于的size时。

1397

查找算法----二分查找、插值查找、斐波那契查找

查找算法----二分查找、插值查找、斐波那契查找 1、二分查找 二分查找的思路分析 先确定该数组的中间的下标mid = (left+right)/2 然后让需要查找的数findVal和arr[mid]比较 2.1 findVal > arr[mid],说明你要查找的数在md的右边,因此需要递归的向右查找 2.2 findVal < arr【mid】,说明你要查找的数在mid的左边,因此需要递归的向左查找 2.3 findval arr(mid】说明找到,就返回 什么时候我们需要结束递

小秋的博客 274

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【查找】四种查找算法

顺序查找 顺序查找(Sequential Search)又叫线性查找,是最简单直接暴力的查找方法。就是从头至尾挨个寻找,找到位置。当遍历完没找到就说明要找的数据不存在。它不要求数据有序。该算法的时间复杂度为O(n)。 public static int seqSearch(int[] arr, int value) { for(int index = 0; index < arr.length; index++) { if(arr[index] == value) {

风继续吹 923

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C语言函数函数(斐波那契函数)

C语言函数部分的结尾篇,令人头晕目眩的斐波那契题目讲解

dongxue727504的博客 5861

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

递归算法--斐波那契数列

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n&amp;lt;=39 很容易我们想到使用递归求解: public class Solution { public int Fibonacci(int n) { if(n == 0) return 0; if(n == 1) ...

一只大笨猫的博客 6万+

递归计算斐波那契数列的时间复杂度

转载 https://zhuanlan.zhihu.com/p/257214075 个人理解,仅作记录 方法一: F(n)=F(n-1)+F(n-2) T(n)=T(n-1)+T(n-2)+1(1为加法所消耗的时间) 两边加1得T(n)+1=T(n-1)+1+T(n-2)+1 令An=T(n)+1 则A(n)=A(n-1)+A(n-2) 所以T(n)+1又是一个斐波那契数列,只是初项不同、考虑两个不同初项的斐波那契数列,可以通过链接里的证明知道任何一个斐波那契数列的增长速度永远小于c,c,2c,3c,5c这

qq_45992231的博客 2525

斐波那契数列的四种实现方式:

最近在刷算法题,发现之前写的斐波那契数列,用的是递归方式,感觉不是很好,尝试一下用别的方法。总共有4种,话不多说,贴代码。 法一:递归,时间复杂度是指数级。 public class Solution { public int Fibonacci(int n) { if(n==0) return 0; if(n==1) ...

qq_1306238492的博客 704

斐波那契数列(复习)

描述 斐波那契(Fibinacci)数列是这样一个数列:1、1、2、3、5、8、13、21、……, 这个数列前两项是1,从第二项开始,每一项都等于前两项之和。 编程输出Fibinacci数列的前20项。5个数一行。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 输入输出示例 输入 输出 示例 1

weixin_61009782的博客 2690

斐波那契数列

斐波那契数列是一种很常见的问题,F(n)=F(n-1)+F(n-2) 该类问题用迭代法处理 递推法:兔子繁殖问题 倒推法:猴子吃桃问题

weixin_43605701的博客 201

两种方式实现斐波那契数列

/递归实现斐波那契数列,问题有点大啊,没用数组做优化之前,太慢了,明显可以感觉到算个第30位都费劲的要死 long long Recur_Fibonacci(int n,long long arr[]) { if(arr[n] != 0)//减少重复计算 { return arr[n]; } if(n <= 0) { return -1;//输入不合法 } else if(n == 1||...

wind_waves的博客 403

递归2之对青蛙跳台阶和斐波那契数列的思考

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 对青蛙跳台阶和斐波那契数列的思考前言一、青蛙跳台阶和斐波那契数列是什么?二、两者的逐个实现1.青蛙跳台阶2.斐波那契数列总结 前言 昨天我算是初步了解了递归并且做了一定的练习,今天就来看一看递归的而两个经典案例:青蛙跳台阶和斐波那契数列的实现。 一、青蛙跳台阶和斐波那契数列是什么? 青蛙跳台阶和斐波那契数列算是递归的两个经典案例了。 青蛙跳台阶就是说有一个青蛙,他面前有n级台阶,青蛙每次可以跳一级或者两级台阶,这个呢是根据青蛙的心情来看

weixin_42504087的博客 644

用迭代和递归计算斐波那契数列

分别使用迭代和递归打印斐波那契数列的前40个元素。 迭代使用的是循环结构,递归使用的是选择结构。 使用递归能让程序的结构更清晰 ,更简洁 ,更容易让人理解,从而减少代码阅读的时间。 但大量的递归调用会建立函数的副本,会消耗大量的内存和时间,而迭代则不需要此种付出。 我在运行程序的时候明显感觉到在后边递归打印的时候速度缓慢。 package com.yc.algorithm.recurs...

Monkey-yc 995

从小猴摘桃子问题引发的斐波那契数列与递归的思考

前几天朋友在群里问了一个问题,“有一颗桃树,上面有20个桃子,一只小猴一次可能摘一只桃子或两只桃子,问小猴摘完树上的所有桃共有多少种可能的方法?”。这个问题是一个比较经典的算法题,可能大家早就见过了,如果你之前没有做过,不放先开动一下大脑,试着去解答一下,可能会产生更多的共鸣,这里跟大家分享一下我的理解和思考

xushichao08的博客 1222

剑指 Offer 10- I. 斐波那契数列

剑指 Offer 10- I. 斐波那契数列 文章目录斐波那契数列相关介绍题目描述法一:递归法非递归解法 斐波那契数列相关介绍 一个小小的数列包含这么多知识,今天长见识了 斐波那契数列取余是否有规律? 斐波那契数列规律总结 斐波那契数列规律探索 题目描述 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1。 斐波那契数列由

weixin_40162095的博客 176
上一篇: 插值查找(运用递归,类似于二分查找)
下一篇: SQL语句二(top,like,通配符,in)
大哥的叔
博客等级 码龄8年 72粉丝 295原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值