Rumah > Artikel > pembangunan bahagian belakang > Fungsi Rekursif dalam C#
Dalam Fungsi Rekursif dalam C#, Rekursi bermaksud untuk menandakan makna yang sama seperti dalam bahasa Inggeris, tepatnya dikenali sebagai mengulang sendiri. Jadi, sifat rekursif fungsi menandakan melakukan kerja yang sama berulang kali. Dan, ya jika program tidak dikendalikan dengan betul, ia pasti akan menjalankan program dalam gelung berterusan. Kita perlu memastikan kita menentukan syarat yang betul dalam melaksanakan fungsi rekursif ini, jika tidak fungsi itu akan memanggil dirinya sendiri, lagi dan lagi, yang membawa kepada pelaksanaan program yang berterusan. Di sini mari kita teruskan dan lihat bagaimana kita boleh mencipta fungsi ini dalam C#.
Sintaks di sini adalah sama dengan sintaks fungsi asas dalam C#. Mari lihat di sini.
Tiada sintaks khas di sini, tetapi kita dapat melihat bahawa fungsi memanggil dirinya sendiri dalam memberikan hasil pulangan. Dan kita mesti berhati-hati dalam menghantar nilai parameter tersebut ke dalam fungsi rekursif itu kerana jelas sekali kita tidak mahu kod berjalan yang tidak berhenti.
Dalam sintaks di atas, tiada apa-apa seperti, kita perlu memanggil fungsi itu hanya dalam penyataan pulangan. Sebaliknya, kita juga boleh menetapkan nilai pulangan fungsi rekursif kepada pembolehubah dan mengembalikan pembolehubah itu juga.
Di sini mari kita ambil pernyataan masalah lalai kami, Pemfaktoran, untuk menjana fungsi rekursif kami.
Kod:
using System; class First { static void Main() { int result; result = fact(7); Console.WriteLine("Factorial is : " + result); } public static int fact(int num) { if(num==0) { return 1; } return num*fact(num-1); } }
Mari kita lihat proses langkah demi langkah.
Output:
Sekarang, dalam kod, saya akan menggantikan parameter fungsi kami daripada num tolak 1 kepada, num. Dalam kes ini, fungsi akan memanggil dirinya berulang kali dan proses akan berulang.
Kod:
using System; class First { static void Main() { int result; result = fact(7); Console.WriteLine("Factorial is : " + result); } public static int fact(int num) { if(num==0) { return 1; } return num*fact(num); } }
Output:
Melalui output di atas, kita dapat melihat dengan jelas pengecualian limpahan tindanan, di mana fungsi itu berulang kali memanggil dirinya sendiri. Hanya bahagian yang diserlahkan diubah berkenaan dengan program pertama.
Dengan cara yang sama, kita boleh menjadikan nombor sebagai nilai yang dimasukkan pengguna seperti di bawah:
Kod:
using System; class First { static void Main() { int result,c; string a; Console.Write("Enter value for number :"); a = Console.ReadLine(); c = Convert.ToInt32(a); result = fact(c); Console.WriteLine("Factorial is : " + result); } public static int fact(int num) { if(num==0) { return 1; } return num*fact(num-1); } }
Output:
Bagaimana jika kita memberikan sifar sebagai input? Ya, satu akan dikembalikan.
Output:
Sekarang, bagaimana jika kita memberikan nombor negatif?
Output:
Ini memberi saya pengecualian limpahan Tindanan juga, kerana fungsi rekursi faktorial kami mengurangkan nilai parameternya pada setiap pelaksanaan. Jadi, nombor negatif akan dikurangkan kepada -6, -7, -8 dan seterusnya. Itulah sebabnya kita pergi ke pengecualian ini.
Sebagai latihan, bolehkah anda cuba mencipta fungsi rekursif untuk nombor negatif?
Petunjuk: Kita boleh mengambil pra-syarat nombor kurang daripada sifar dan menambah satu pada parameter fungsi rekursif kami sehingga sifar datang.
Terdapat beberapa contoh baik yang boleh dipetik berkenaan dengan fungsi rekursif:
Kami mempunyai beberapa tempat lain untuk menggunakan fungsi rekursif ini.
Seperti yang anda boleh perhatikan fungsi rekursif adalah serupa dengan fungsi gelung, tetapi di mana kita memanggil fungsi yang sama berulang kali.
Mari kita lihat bagaimana kita boleh menulis fungsi rekursif dalam menambah nombor secara berterusan sehingga program menemui nombor kedua yang diberikan sebagai input.
Kod:
using System; class First { static void Main() { int result,c,d; string a,b; Console.Write("Enter value for 1st number :"); a = Console.ReadLine(); c = Convert.ToInt32(a); Console.Write("Enter value for 2nd number :"); b = Console.ReadLine(); d = Convert.ToInt32(b); result = add(c,d); Console.WriteLine("Add is : " + result); } public static int add(int num1,int num2) { int sum ; sum=num1; if (num1 < num2 ) { num1++; sum=sum+add(num1,num2); return sum; } return sum; } }
Di sini, apa yang kami lakukan ialah:
Sebagai contoh, jika saya mengambil num1 = 5 dan num2 = 8, maka jumlah output yang kami dapat ialah 5+6+7+8, iaitu 26.
Output:
Dan bagaimana pula jika, saya memberikan num1 kurang daripada num2?
Output:
Ia memberikan beberapa sebagai nilai num1 seperti yang pertama, kami menetapkan nilai jumlah kepada nilai num1 dan jumlah kembali jika pernyataan if tidak berkenaan.
Sebagai latihan, bolehkah anda menulis fungsi rekursif untuk mencetak "Saya suka pengekodan" sehingga ia mengikut syarat tertentu?
Petunjuk: Kita boleh mengikut prosedur penambahan yang sama yang dilakukan dalam program di atas.
Jadi, di sini kami telah berjaya mendapatkan pelaksanaan fungsi rekursif, bagaimana fungsi ini dipanggil dan beberapa contoh daripadanya. Kami juga mempelajari bagaimana perbezaan mudah dalam panggilan fungsi boleh menjadikan atur cara lari daripada hadnya dan mencipta pengecualian.
Atas ialah kandungan terperinci Fungsi Rekursif dalam C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!