Pengaturcaraan dalam Go, penutupan dan rekursi ialah dua konsep yang sangat penting. Mereka boleh membantu kami menyelesaikan beberapa masalah kompleks dengan lebih baik dan meningkatkan kebolehbacaan dan kebolehselenggaraan kod. Dalam artikel ini, kami akan meneroka cara menggunakan penutupan dan pengulangan dalam Go.
1. Penutupan
Penutupan merujuk kepada nilai pembolehubah fungsi, yang merujuk kepada pembolehubah di luar badan fungsi. Dalam Go, kita boleh menggunakan fungsi tanpa nama untuk melaksanakan penutupan.
Berikut ialah contoh kod:
func main() { user := "Alice" hello := func() { fmt.Printf("Hello, %s!", user) } hello() }
Dalam contoh ini, kami mencipta pembolehubah bernama user
dan memberikannya nilai Alice
. Seterusnya, kami mentakrifkan fungsi tanpa nama dan menetapkannya kepada pembolehubah bernama hello
. Di dalam fungsi tanpa nama, kami merujuk pembolehubah user
, menjadikannya penutup. Akhirnya, apabila kita memanggil fungsi hello
, rentetan Hello, Alice!
akan dikeluarkan.
Selain menggunakan pembolehubah luaran, penutupan boleh mencipta fungsi baharu di dalam fungsi dan mengembalikan fungsi ini. Ini boleh melaksanakan beberapa fungsi lanjutan dengan mudah, seperti kari dan aplikasi separa dalam pengaturcaraan berfungsi.
Kod contoh berikut menunjukkan cara menggunakan penutupan untuk melaksanakan kari:
func add(x int) func(int) int { return func(y int) int { return x + y } } func main() { addTwo := add(2) fmt.Println(addTwo(3)) // 输出 5 addTen := add(10) fmt.Println(addTen(7)) // 输出 17 }
Dalam contoh ini, kami mentakrifkan fungsi add
yang menerima parameter integer dan mengembalikan fungsi. Fungsi yang dikembalikan ini juga menerima hujah integer dan mengembalikan jumlah dua integer. Nilai pulangan bagi fungsi add
ialah penutupan, yang menangkap nilai pembolehubah luaran x
dan mengembalikan fungsi yang menambah x
pada parameter yang diluluskan.
Dalam fungsi main
, kami mula-mula membuat penutupan add(2)
menggunakan addTwo
. Penutupan ini menangkap nilai pembolehubah luaran x=2
dan mengembalikan fungsi baharu. Apabila kita memanggil addTwo(3)
, 5 akan keluar. Seterusnya, kami membuat penutupan lain addTen
dan menetapkan nilai x
kepada 10. Panggil addTen(7)
sekali lagi, hasil keluaran ialah 17. Ini pada asasnya bagaimana fungsi kari berfungsi.
2. Rekursi
Rekursi merujuk kepada gelagat fungsi yang memanggil dirinya secara dalaman. Dalam Go, kita boleh menggunakan fungsi rekursif untuk melaksanakan beberapa pengiraan kompleks atau operasi pemprosesan data. Fungsi rekursif perlu memenuhi dua syarat: kes asas (juga dipanggil sempadan rekursif) dan kes rekursif.
Kes asas merujuk kepada keadaan sempadan di mana fungsi rekursif perlu menghentikan rekursi. Di bawah keadaan ini, fungsi rekursif tidak lagi memanggil dirinya sendiri, tetapi mengembalikan nilai tertentu atau melakukan operasi lain. Kes rekursif ialah apabila fungsi rekursif terus memanggil dirinya secara rekursif semasa mengendalikan kes bukan asas. Semasa setiap rekursi, nilai parameter akan diubah, supaya hasil rekursif terus mendekati situasi asas.
Berikut ialah contoh penggunaan fungsi rekursif untuk mengira faktorial:
func factorial(n int) int { if n == 0 { return 1 } else { return n * factorial(n-1) } } func main() { fmt.Println(factorial(5)) // 输出 120 }
Dalam contoh ini, kami mentakrifkan fungsi factorial
untuk mengira faktorial integer. Apabila nilai input ialah 0, fungsi mengembalikan 1 (huruf asas). Jika tidak, fungsi itu memanggil dirinya secara rekursif dan mengurangkan n dengan satu. Proses rekursif ini akan berterusan sehingga n sama dengan 0. Dalam setiap rekursi, kita darab n dengan hasil 〈🎜〉 sehingga n akhirnya sama dengan 1, dan kemudian rekursi kembali dan mengira keseluruhan nilai faktor. factorial(n-1)
Atas ialah kandungan terperinci Bagaimana untuk menggunakan penutupan dan rekursi dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!