C语言第十三次课(递归2;二分查询的循环或递归)

本文探讨了如何通过递归优化将斐波那契数列的时间复杂度从指数级降低到线性级,并介绍了二分查询的基本原理和实现。在二分查询中,我们注意到当`left=right`时,应继续比较以避免遗漏值。同时,文章提供了递归实现二分查询的方法,以进一步提高搜索效率。
摘要由CSDN通过智能技术生成

C语言第十三次课

(1):Fibonacci数列:从第三项开始,每一项都等于前两项之和。
例如:0 1 1 2 3 4 5 8 13…
在这里插入图片描述
在这里插入图片描述过程图解:
在这里插入图片描述
时间复杂程度出现了指数型耗损即O(2^n);因为进行了大规模的重复计算。
在这里插入图片描述
要求从新编写递归部分来降低时间复杂程度;使时间复杂程度变为 O(n);将上面的循环改为递归,利用参数来做文章。
在这里插入图片描述
执行过程如下:
在这里插入图片描述
(2)如果数组有序使用 “二分查询”
在这里插入图片描述
思考:如果val=45时 程序运行时哪里出了问题?
在这里插入图片描述
注意:left=right ;并未找到值。应当改为while(left<=right)。当left=right时说明数据下标相同,但数据规模内还有一个值需要去进行比较。

二分查询的全部代码:
在这里插入图片描述
有重复值时二分查找最左边或者最右边:
在这里插入图片描述
另一种方法:
在这里插入图片描述
二分查询把“循环”改为“递归”。
在这里插入图片描述
将循环改为递归:
在这里插入图片描述
解释为:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值