Rumah pembangunan bahagian belakang tutorial php PHP之斐波那契数列的N种算法

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

Sep 01, 2020 pm 01:17 PM
algoritma php Jujukan Fibonacci

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);
}
Salin selepas log masuk

递归优化

从上面的递归方法可以看到,进行了很多的重复计算,性能极差,如果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;
}
Salin selepas log masuk

记忆化自底向上

自底向上通过迭代计算斐波那契数的子问题并存储已计算的值,通过已计算的值进行计算。使用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];
}
Salin selepas log masuk

自底向上进行迭代

最低位初始化赋值,使用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;
}
Salin selepas log masuk

公式法

通过了解斐波那契序列和黄金分割比之间的关系,使用黄金分割率计算第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;
}
Salin selepas log masuk

无敌欠揍法

这个方法,我就不多说了吧,大家都懂的,但是千万别轻易尝试……

PHP之斐波那契数列的N种算法
/**
 * 无敌欠揍法
 * @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];
}
Salin selepas log masuk

最后

好了,我就大概写了几种解法,如果有不对的地方,请大家指出,我会及时修改,大家有其他计算方法,欢迎分享出来一起交流和学习,谢谢!


Atas ialah kandungan terperinci PHP之斐波那契数列的N种算法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan algoritma jujukan Fibonacci dalam C++ Cara menggunakan algoritma jujukan Fibonacci dalam C++ Sep 19, 2023 am 10:15 AM

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

Apakah algoritma biasa dalam pengaturcaraan PHP? Apakah algoritma biasa dalam pengaturcaraan PHP? Jun 12, 2023 am 08:30 AM

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? Bagaimana untuk menulis algoritma untuk menyelesaikan urutan Fibonacci dalam Python? Sep 19, 2023 am 09:18 AM

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

Pengisihan tatasusunan dan algoritma carian dalam PHP Pengisihan tatasusunan dan algoritma carian dalam PHP Jun 23, 2023 am 09:45 AM

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)

Diberi nombor, tulis program C untuk mencari Jujukan Fibonacci Diberi nombor, tulis program C untuk mencari Jujukan Fibonacci Sep 02, 2023 pm 11:49 PM

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

Bagaimana untuk mewakili pengetahuan dan menjana algoritma secara automatik dalam PHP? Bagaimana untuk mewakili pengetahuan dan menjana algoritma secara automatik dalam PHP? May 22, 2023 pm 08:10 PM

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? Analisis algoritma PHP: Bagaimana untuk menggunakan algoritma carian binari untuk mencari elemen dalam tatasusunan tertib dengan cepat? Sep 19, 2023 pm 01:14 PM

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;

Fahami struktur dan algoritma data PHP Fahami struktur dan algoritma data PHP May 24, 2023 am 08:15 AM

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

See all articles