Dari kursus: Pelatihan Esensial Python

Solusi: Faktorial

- [Instruktur] Saya harap Anda bersenang-senang mencari tahu fungsi faktorial itu. Selamat datang kembali. Bagaimana kabarmu? Saya akan menunjukkan solusi saya, dan jika Anda melihat file petunjuk, solusi ini mungkin tidak terlalu mengejutkan. Hal pertama yang ingin kita lakukan adalah memastikan kita dapat mengambil faktorial dari input kita, jadi jika input kita bukan bilangan bulat, kita akan mengembalikan tidak ada. Jadi ini menangani float seperti 1.2 serta string "spam, spam, spam, spam, spam, spam" yang mungkin Anda perhatikan sebagai kasus uji. Tentu saja, negatif dua masih merupakan bilangan bulat yang valid, jadi kita perlu membuat kasus khusus untuk itu juga, jadi kita memeriksa untuk melihat apakah angka input kurang dari nol dan kemudian kita mengembalikan tidak ada, karena Anda tidak dapat memiliki faktorial bilangan bulat negatif. Sekarang kita ingin turun ke bisnis dengan menghitung faktorial. Untuk melakukan ini, saya akan membuat dua variabel, fakta, kependekan dari faktorial. Ini adalah hal yang pada akhirnya kita kembalikan, dan kemudian counter untuk melacak berapa banyak loop yang perlu kita lakukan. Jadi sementara counter kurang dari angka input, itu pada dasarnya adalah jumlah iterasi, faktorial kita sama dengan faktorial, faktorial yang ada, dikalikan penghitung, dan kemudian dengan setiap lintasan dalam loop, kita menambah atau menambahkan satu ke penghitung kita. Jadi pada lintasan pertama, Anda akan mengalikan dengan satu, satu kali satu. Pada lintasan kedua, Anda akan mengalikan dengan dua, pada lintasan ketiga, dikalikan tiga, dan seterusnya, hingga jumlah yang dilewati. Jadi jika Anda lulus lima, Anda akan berakhir dengan kembali satu kali dua kali tiga kali empat kali lima, yang persis seperti yang kami inginkan. Dan ingat, kita memiliki kasus khusus di mana angka input sama dengan nol, sehingga matematikawan memutuskan bahwa faktorial nol adalah satu. Saya tidak memutuskan itu, itu adalah matematikawan, tetapi kita sebagai pemrogram komputer harus mengikuti aturan matematikawan, jadi apakah ini berfungsi ketika angka input adalah nol? Jika num adalah nol, maka kita mulai angka fakta pada satu. Loop while tidak pernah dimasukkan karena angka input nol sudah lebih besar dari penghitung, jadi kita akhirnya mengembalikan satu, yang benar, sangat bagus. Sekarang, ada juga cara yang lebih pendek untuk menulis fungsi ini, dan itu melalui rekursi, di mana fungsi memanggil dirinya sendiri. Jadi saya hanya ingin menunjukkan solusinya dengan sangat cepat. Saya sebenarnya akan menyimpan pemeriksaan yang sama di sini, dan saya akan menambahkan kasus tambahan. Jika num sama dengan nol, kembalikan satu. Oke, akhirnya, kita ingin mengembalikan num kali num faktorial dikurangi satu, dan jika kita menguji ini, itu juga berhasil. Keren. Jadi apa yang terjadi? Nah, katakanlah kita menyebut fungsi ini faktorial dengan angka tiga, dan saya hanya akan menulis komentar di sini. Faktorial tiga adalah bagaimana kita akan menyebutnya, dan apa yang sama dengan ini, ini bukan kode Python, ini hanya semacam singkatan. Apa yang akan dilakukan ini adalah akan mengatakan, oke, bagus, semua pemeriksaan ini lulus untuk nomor tiga. Itu tidak sama dengan nol, jadi kita turun ke sini dan kita mengembalikan tiga kali faktorial dari tiga dikurangi satu, yaitu dua, jadi kita akhirnya mengembalikan tiga kali faktorial dua. Nah, apa itu faktorial dua? Jadi dipanggil lagi dengan num menjadi dua, melewati semua ini, dan ternyata faktorial dua sama dengan dua kali faktorial satu. Baiklah, jadi apa yang dimaksud dengan faktorial? Kami menyebutnya lagi. Itu disebut di sini. Faktorial satu sama dengan satu kali nol faktorial, satu kali nol faktorial. Nah, apa itu nol faktorial? Dipanggil lagi. Jika bilangannya nol, kita mengembalikan satu, jadi nol faktorial adalah satu, dan ternyata faktorial tiga adalah tiga kali dua kali satu kali satu, yaitu enam, jadi panggilan fungsi asli kita, faktorial tiga, sama dengan enam, dan pada akhirnya, mengembalikan enam. Sekarang, rekursi mungkin tampak seperti sihir pada awalnya, tetapi jangan terintimidasi. Itu hanya semacam lingkaran yang mewah. Memang butuh beberapa saat untuk menguasainya, tetapi ini juga merupakan keterampilan yang sangat berguna untuk dimiliki dalam repertoar pemrograman Anda.

Konten