首页 文章 精选 留言 我的

精选列表

搜索[php扩展],共10000篇文章
优秀的个人博客,低调大师

PHP算法:斐波那契数列的N种算法

云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 前言 前段时间,遇到优化计算斐波那契数列的常规递归方法,但是一时间并没有及时想到很好的方法,所以后面查找了相关资料,总结了多种计算解法,所以分享出来,和大家一起交流学习。 斐波那契数是什么 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)。 知道了斐波那契数,那么下面我们就用多种不同的方法来计算获取第N位斐波那契数。 普通递归 这种方法是最常规的,直接根据定义F(n)=F(n - 1)+F(n - 2)递归计算即可,但是性能是最低的。 /** * 普通递归 * @param int $n * @return int */ function fib($n = 1) { // 低位处理 if ($n < 3) { return 1; } // 递归计算前两位 return fib($n - 1) + fib($n - 2); } 递归优化 从上面的递归方法可以看到,进行了很多的重复计算,性能极差,如果N越大,计算的次数太可怕了,那么,既然因为重复计算影响了性能,那么优化就从减少重复计算入手,即把之前计算的存储起来,这样就避免了过多的重复计算,优化了递归算法。 /** * 递归优化 * @param int $n * @param int $a * @param int $b * @return int */ function fib_2($n = 1, $a = 1, $b = 1) { if ($n > 2) { // 存储前一位,优化递归计算 return fib_2($n - 1, $a + $b, $a); } return $a; } 记忆化自底向上 自底向上通过迭代计算斐波那契数的子问题并存储已计算的值,通过已计算的值进行计算。使用for循环,减少递归带来的重复计算问题。 /** * 记忆化自底向上 * @param int $n * @return int */ function fib_3($n = 1) { $list = []; for ($i = 0; $i <= $n; $i++) { // 从低到高位数,依次存入数组中 if ($i < 2) { $list[] = $i; } else { $list[] = $list[$i - 1] + $list[$i - 2]; } } // 返回最后一个数,即第N个数 return $list[$n]; } 自底向上进行迭代 最低位初始化赋值,使用for从低位到高位迭代计算,从而得到第N个数。 /** * 自底向上进行迭代 * @param int $n * @return int */ function fib_4($n = 1) { // 低位处理 if ($n <= 0) { return 0; } if ($n < 3) { return 1; } $a = 0; $b = 1; // 循环计算 for ($i = 2; $i < $n; $i++) { $b = $a + $b; $a = $b - $a; } return $b; } 公式法 通过了解斐波那契序列和黄金分割比之间的关系,使用黄金分割率计算第N个斐波那契数。 /** * 公式法 * @param int $n * @return int */ function fib_5($n = 1) { // 黄金分割比 $radio = (1 + sqrt(5)) / 2; // 斐波那契序列和黄金分割比之间的关系计算 $num = intval(round(pow($radio, $n) / sqrt(5))); return $num; } 无敌欠揍法 这个方法,我就不多说了吧,大家都懂的,但是千万别轻易尝试…… /** * 无敌欠揍法 * @param int $n * @return int */ function fib_6($n = 1) { // 列举了30个数 $list = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269]; return $list[$n]; } 【云栖号在线课堂】每天都有产品技术专家分享!课程地址:https://yqh.aliyun.com/live 立即加入社群,与专家面对面,及时了解课程最新动态!【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK 原文发布时间:2020-07-08本文作者:gxcuizy本文来自:“掘金”,了解相关信息可以关注“掘金”

优秀的个人博客,低调大师

阿里云OSS php 自定义域名 绑定bucket

做OSS图片上传时,可以采用阿里云分配的oss域名,也可以使用自定义域名(绑定用户域名),使用阿里云域名太长,不美观,我使用的绑定用户域名。使用阿里云分配域名时图片文件可以正常上传,使用自定义绑定用户域名时发现报错. "\"绑定用户域名\"bucket name is invalid" 错误大概意思是绑定的用户域名没有关联到bucket上,在查看阿里云oss文档时发现还需要使用CNAME,使用CNAME绑定到域名域名OSS文档地址:https://help.aliyun.com/document_detail/32100.html?spm=a2c4g.11186623.6.1055.181165d3LkhGyqPHP上传代码处理逻辑 public function upload() { // 获取上传文件表单字段名 $fileKey = array_keys(request()->file()); //获取表单上传文件 $file = request()->file($fileKey['0']); $resResult = Image::open($file); try { $config = Config::get('aliyun_oss'); //获取Oss的配置 //实例化对象 将配置传入 $ossClient = new OssClient($config['KeyId'], $config['KeySecret'], $config['Endpoint'],true); //这里是有sha1加密 生成文件名 之后连接上后缀 $fileName = sha1(date('YmdHis', time()) . uniqid()) . '.' . $resResult->type(); //执行阿里云上传 $result = $ossClient->uploadFile($config['Bucket'], $config['path'] . $fileName, $file->getInfo()['tmp_name']); if ($result) { $result['code'] = 1; $result['info'] = '图片上传成功!'; $result['url'] = $result['oss-request-url']; return $result; } } catch (OssException $e) { return $e->getMessage(); } } 需要注意,在实例化OSS对象时后面需要添加为true,这样就可以使用自定义域名了

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册