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

前言
前段时间,遇到优化计算斐波那契数列的常规递归方法,但是一时间并没有及时想到很好的方法,所以后面查找了相关资料,总结了多种计算解法,所以分享出来,和大家一起交流学习。
推荐:《PHP视频教程》
斐波那契数是什么
斐波那契数列(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]; }
最后
好了,我就大概写了几种解法,如果有不对的地方,请大家指出,我会及时修改,大家有其他计算方法,欢迎分享出来一起交流和学习,谢谢!
Atas ialah kandungan terperinci PHP之斐波那契数列的N种算法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Cara menggunakan algoritma jujukan Fibonacci dalam C++ Jujukan Fibonacci ialah jujukan yang sangat klasik, dan definisinya ialah setiap nombor ialah jumlah dua nombor sebelumnya. Dalam sains komputer, menggunakan bahasa pengaturcaraan C++ untuk melaksanakan algoritma jujukan Fibonacci adalah kemahiran asas dan penting. Artikel ini akan memperkenalkan cara menggunakan C++ untuk menulis algoritma jujukan Fibonacci dan memberikan contoh kod khusus. 1. Kaedah rekursif Rekursi ialah kaedah biasa algoritma jujukan Fibonacci. Dalam C++, algoritma jujukan Fibonacci boleh dilaksanakan secara ringkas menggunakan rekursi. bawah

Dalam pengaturcaraan PHP, algoritma adalah bahagian penting. Menguasai algoritma biasa bukan sahaja boleh meningkatkan kecekapan kod, tetapi juga membantu dengan reka bentuk program seterusnya. Berikut ialah algoritma biasa dalam pengaturcaraan PHP: Algoritma pengisihan Algoritma pengisihan merujuk kepada penyusunan set data ke dalam urutan tersusun mengikut peraturan tertentu. Dalam pengaturcaraan PHP, algoritma pengisihan yang biasa digunakan termasuk jenis gelembung, isihan sisipan, isihan pemilihan, isihan cepat, dsb. Antaranya, isihan pantas ialah algoritma pengisihan dengan kerumitan masa yang paling rendah dan sesuai untuk memproses data berskala besar. algoritma carian algoritma carian

Bagaimana untuk menulis algoritma untuk menyelesaikan urutan Fibonacci dalam Python? Jujukan Fibonacci ialah jujukan klasik yang ditakrifkan seperti berikut: nombor pertama dan kedua adalah kedua-duanya 1, dan bermula dari nombor ketiga, setiap nombor ialah jumlah dua nombor sebelumnya. Iaitu: 1,1,2,3,5,8,13,21,34,... Dalam Python, anda boleh menggunakan gelung atau rekursi untuk menulis algoritma untuk menyelesaikan jujukan Fibonacci. Pelaksanaan khusus kedua-dua kaedah ini akan diperkenalkan di bawah. Kaedah 1: Gunakan gelungGunakan gelung

PHP ialah bahasa pengaturcaraan yang sangat popular yang menyokong pelbagai jenis data dan algoritma, di mana pengisihan tatasusunan dan algoritma carian adalah bahagian asas dan penting. Artikel ini akan memperkenalkan algoritma pengisihan tatasusunan dan carian yang biasa digunakan dalam PHP, serta senario aplikasi dan analisis kecekapan mereka. 1. Isih tatasusunan PHP menyediakan pelbagai kaedah pengisihan tatasusunan, termasuk isihan gelembung, isihan sisipan, isihan pemilihan, isihan pantas, isihan gabungan, dsb. Berikut ialah pengenalan dan kod sampel untuk beberapa algoritma yang biasa digunakan: Bubble Sort (BubbleSort)

Urutan Fibonacci ialah satu siri nombor yang diperoleh dengan menambah dua nombor pertama. Urutan Fibonacci bermula dengan dua nombor f0 dan f1. Nilai awal fo dan f1 boleh menjadi 0, 1 atau 1, 1. Jujukan Fibonacci memenuhi syarat berikut: fn=fn-1+fn-2 algoritma merujuk kepada algoritma jujukan Fibonacci. STARTStep1:Readintegervariablea,b,catruntimeStep2:Initializea=0andb=0Step3:Computec=a+bStep4:PrintcStep5:Seta=b,b=cStep6:Repeat3to5fornt

Dengan populariti Internet dan pengembangan aplikasi yang berterusan, pembangunan bahasa pengaturcaraan menjadi semakin penting. Sebagai bahasa pengaturcaraan yang sangat popular, PHP juga sentiasa berkembang. Dalam proses pengaturcaraan dengan PHP, pembangun PHP mungkin menghadapi keperluan untuk mewakili beberapa pengetahuan dan menjana algoritma secara automatik. Jadi, bagaimana untuk mewakili pengetahuan dan menjana algoritma secara automatik dalam PHP? Artikel ini akan membincangkan perkara ini di bawah. 1. Perwakilan pengetahuan Perwakilan pengetahuan merupakan isu yang sangat penting dalam bidang kecerdasan buatan. Tahu

Analisis algoritma PHP: Bagaimana untuk menggunakan algoritma carian binari untuk mencari elemen dalam tatasusunan tertib dengan cepat? Gambaran Keseluruhan: Algoritma carian binari ialah algoritma carian yang cekap yang sesuai untuk mencari elemen tertentu dalam tatasusunan tertib. Artikel ini akan memperkenalkan prinsip algoritma carian binari secara terperinci dan memberikan contoh kod PHP. Prinsip: Algoritma carian binari dengan cepat mencari elemen sasaran dengan berulang kali mengurangkan julat carian sebanyak separuh. Prosesnya adalah seperti berikut: pertama, sempitkan julat carian ke permulaan dan penghujung tatasusunan kemudian, hitung indeks elemen tengah dan bandingkan dengan elemen sasaran;

PHP ialah bahasa skrip yang digunakan secara meluas dalam pembangunan web dan semakin baik dan lebih baik dalam membina laman web dinamik. Dalam pembangunan web, struktur data dan algoritma tidak kurang pentingnya daripada kawasan pengaturcaraan lain, dan kesannya terhadap kecekapan menjalankan program amat ketara. Terutamanya dalam senario yang melibatkan jumlah penyimpanan dan pemprosesan data yang besar, atau keperluan prestasi program yang tinggi, struktur data dan algoritma telah menjadi bahagian yang tidak boleh diabaikan. Artikel ini terutamanya memperkenalkan beberapa struktur data dan algoritma yang biasa digunakan dalam PHP. 1. Tatasusunan struktur data Tatasusunan PHP adalah sangat biasa
