Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP secara rekursif mencari nilai minimum tatasusunan

PHP secara rekursif mencari nilai minimum tatasusunan

WBOY
WBOYasal
2023-05-22 19:00:35481semak imbas

Dalam PHP, rekursi ialah teknik yang sangat berguna yang boleh menyelesaikan banyak masalah yang kompleks. Apabila berurusan dengan tatasusunan, rekursi juga boleh membantu kami mencari nilai minimum dalam tatasusunan. Dalam artikel ini, kita akan membincangkan cara mengira nilai minimum tatasusunan dalam PHP menggunakan rekursi.

Apakah rekursi?

Rekursi ialah teknik di mana fungsi memanggil dirinya sendiri. Dalam fungsi rekursif, kaedah penyelesaian masalah memanggil dirinya sendiri untuk menyelesaikan sub-masalah yang lebih kecil. Apabila masalah menjadi terlalu kecil untuk diuraikan lagi, fungsi rekursif berhenti memanggil dirinya sendiri dan mengembalikan hasilnya. Rekursi sering digunakan untuk menyelesaikan masalah yang kompleks seperti traversal struktur pokok, carian graf dan algoritma pengisihan dan carian.

Pelaksanaan rekursif

Mari kita mulakan dengan contoh mudah: mengira jumlah tatasusunan. Kita boleh melaksanakan algoritma ini menggunakan rekursi:

function sum($arr){
    if(count($arr) == 0){
        return 0;
    } else {
        $first = array_shift($arr);
        return $first + sum($arr);
    }
}

// 测试
$arr = array(1, 2, 3, 4, 5);
echo sum($arr); // 输出 15

Dalam kod di atas, kami mula-mula menyemak sama ada tatasusunan kosong. Jika ya, kembalikan 0. Jika tidak, kami memunculkan elemen pertama dalam tatasusunan dan menambahkannya dengan fungsi sum() memanggil dan menghantar seluruh tatasusunan secara rekursif. Proses ini berterusan sehingga kami telah memproses keseluruhan tatasusunan. Akhirnya, kami kembalikan hasilnya.

Timbunan panggilan fungsi rekursif

Nota: Teknik rekursif sangat berguna, tetapi ia juga boleh menyebabkan masalah. Ini kerana setiap panggilan fungsi menambah bingkai baharu pada tindanan, dan saiz tindanan adalah terhad. Jika kedalaman rekursi terlalu besar, timbunan mungkin habis. Dalam PHP, secara lalai, saiz tindanan ialah 1000 panggilan fungsi. Untuk mengelakkan ini, kita boleh menggunakan lelaran dan bukannya rekursi atau meningkatkan saiz tindanan maksimum PHP.

Kira nilai minimum tatasusunan

Seterusnya, mari lihat cara menggunakan rekursi untuk mencari nilai minimum dalam tatasusunan dalam PHP. Idea untuk melaksanakan algoritma ini adalah serupa dengan mengira jumlah tatasusunan:

function findMinimum($arr){
    // 如果数组为空,则返回NULL
    if(count($arr) == 0){
        return NULL;
    } else if(count($arr) == 1){
        // 如果数组只有一个元素,则返回它
        return $arr[0];
    } else {
        // 否则,递归地调用自身,并比较子数组的最小值
        $first = $arr[0];
        $rest = array_slice($arr,1);
        $min = findMinimum($rest);
        if($min < $first){
            return $min;
        } else {
            return $first;
        }
    }
}

// 测试
$arr = array(1, 3, 2, 5, 4);
echo findMinimum($arr); // 输出 1

Mula-mula, kita semak saiz tatasusunan. Jika tatasusunan kosong, NULL dikembalikan. Jika hanya ada satu elemen, kembalikan. Jika tidak, kami menyimpan elemen pertama tatasusunan ke dalam pembolehubah $first, dan elemen yang selebihnya ke dalam pembolehubah $rest. Seterusnya, kami memanggil dirinya secara rekursif, melepasi tatasusunan $rest sebagai hujah. Ini akan mengembalikan nilai minimum subarray. Akhir sekali, kami membandingkan $min dan $first dan mengembalikan minimum kedua-duanya.

Ringkasan

Dalam artikel ini, kami membincangkan kaedah pengiraan nilai minimum dalam tatasusunan PHP menggunakan rekursi. Walaupun rekursi adalah teknik yang sangat berguna, ia juga boleh membawa kepada masalah seperti limpahan tindanan. Oleh itu, kita perlu berhati-hati apabila menggunakan rekursi. Jika kemungkinan limpahan tindanan adalah tinggi, kami boleh mempertimbangkan untuk menggunakan algoritma berulang atau meningkatkan saiz tindanan maksimum PHP.

Atas ialah kandungan terperinci PHP secara rekursif mencari nilai minimum tatasusunan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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