Rekursi ialah teknik di mana fungsi memanggil dirinya sendiri untuk menyelesaikan masalah, termasuk keadaan asas untuk menamatkan rekursi. Dalam C++, anda boleh menggunakan kata kunci pulangan untuk mengembalikan nilai fungsi dan menamatkan rekursi. Rekursi boleh digunakan untuk menyelesaikan masalah klasik seperti masalah Menara Hanoi, di mana ia memindahkan n cakera dari satu kutub ke kutub yang lain. Dalam pertandingan pengaturcaraan, rekursi lazimnya digunakan untuk menyelesaikan masalah berstruktur pokok, carian mendalam-dahulu, menjejak ke belakang, dan membahagi dan menakluk.
Pelaksanaan rekursif fungsi C++: Aplikasi rekursi dalam pertandingan pengaturcaraan
Apakah rekursi?
Rekursi ialah teknik pengaturcaraan di mana fungsi memanggil dirinya sendiri untuk menyelesaikan masalah. Fungsi rekursif biasanya mengandungi keadaan garis dasar Apabila keadaan garis dasar dicapai, fungsi menghentikan rekursi dan mengembalikan hasil. Tanpa syarat garis dasar, rekursi akan berterusan selama-lamanya.
Pelaksanaan rekursi dalam C++
Dalam C++, anda boleh menggunakan kata kunci return
untuk mengembalikan nilai fungsi dan menamatkan rekursi: return
返回函数的值并终止递归:
int factorial(int n) { if (n == 0) { return 1; // 基线条件 } else { return n * factorial(n - 1); } }
实战案例:汉诺塔问题
汉诺塔问题是一个经典的递归问题,涉及将 n 个圆盘从一个杆移动到另一个杆,每次只能移动一个圆盘,并且较大的圆盘不能放在较小的圆盘之上。
以下是使用递归解决汉诺塔问题的 C++ 函数:
void hanoi(int n, int from, int to, int via) { if (n == 1) { cout << "Move disk 1 from " << from << " to " << to << endl; return; } hanoi(n - 1, from, via, to); cout << "Move disk " << n << " from " << from << " to " << to << endl; hanoi(n - 1, via, to, from); }
在该函数中,
n
是圆盘的数量from
、to
和 via
rrreeeMasalah Tower of Hanoi ialah masalah rekursif klasik yang melibatkan pemindahan n cakera dari satu kutub ke satu kutub yang lain, dan cakera yang lebih besar tidak boleh diletakkan di antara cakera yang lebih kecil.
Berikut ialah fungsi C++ yang menggunakan rekursi untuk menyelesaikan masalah Menara Hanoi:
rrreeeAtas ialah kandungan terperinci Pelaksanaan rekursif fungsi C++: Aplikasi rekursi dalam pertandingan pengaturcaraan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!