Rumah >pembangunan bahagian belakang >C++ >Pelaksanaan rekursif fungsi C++: Contoh teka-teki klasik rekursi?

Pelaksanaan rekursif fungsi C++: Contoh teka-teki klasik rekursi?

PHPz
PHPzasal
2024-04-22 15:27:02951semak imbas

Rekursi ialah teknik pengaturcaraan yang membolehkan fungsi memanggil dirinya sendiri untuk menyelesaikan masalah yang kompleks dengan menguraikannya kepada sub-masalah. Dalam kes praktikal, pelaksanaan rekursif teka-teki Menara Hanoi: 1. Apabila terdapat hanya satu cakera, bergerak terus ke menara sasaran. 2. Gerakkan cakera kecil ke menara tambahan. 3. Alihkan cakera terbesar ke menara sasaran. 4. Alihkan cakera kecil dari menara tambahan ke menara sasaran.

C++ 函数的递归实现:递归的经典谜题示例?

Pelaksanaan Rekursif Fungsi C++: Contoh Teka-teki Klasik

Rekursi ialah teknik pengaturcaraan yang membenarkan fungsi memanggil dirinya sendiri untuk menyelesaikan masalah. Ini sesuai untuk masalah kompleks yang perlu dipecahkan kepada sub-masalah.

Sintaks fungsi rekursif

Dalam C++, sintaks fungsi rekursif adalah seperti berikut:

return_type function_name(parameter_list) {
  // 处理基线情况
  if (base_condition) {
    return base_result;
  }
  
  // 处理递归情况
  return function_name(updated_parameter_list);
}

Di mana:

  • return_type ialah jenis yang dikembalikan oleh fungsi tersebut. return_type 是函数返回的类型。
  • function_name 是函数的名称。
  • parameter_list 是传递给函数的参数列表。
  • base_condition 是递归的基线情况,它决定函数的递归循环何时结束。
  • base_result 是当基线情况为 true 时函数返回的结果。
  • updated_parameter_list
  • nama_fungsi ialah nama fungsi.

senarai_parameter ialah senarai parameter yang dihantar ke fungsi.

keadaan_asas ialah keadaan garis dasar rekursi, yang menentukan apabila gelung rekursif fungsi tamat.

base_result ialah hasil yang dikembalikan oleh fungsi apabila situasi garis dasar adalah true. updated_parameter_list ialah senarai parameter yang dikemas kini apabila memanggil fungsi secara rekursif.

🎜🎜Kes praktikal: Menara Hanoi 🎜🎜Menara Hanoi ialah teka-teki rekursif klasik. Ia mempunyai tiga menara, setiap satu dengan bilangan cakera yang berbeza. Matlamatnya adalah untuk memindahkan semua cakera dari menara pertama ke menara ketiga sambil memastikan bahawa cakera yang lebih kecil sentiasa berada di atas cakera yang lebih besar. 🎜
void hanoi(int n, char from, char to, char aux) {
  // 基线情况:只有一个圆盘时,直接移动到目标塔
  if (n == 1) {
    cout << "移动盘子 " << n << " 从塔 " << from << " 到塔 " << to << endl;
    return;
  }
  
  // 递归情况:将塔上的较小圆盘移动到辅助塔
  hanoi(n-1, from, aux, to);
  
  // 将最大的圆盘移动到目标塔
  cout << "移动盘子 " << n << " 从塔 " << from << " 到塔 " << to << endl;
  
  // 将较小的圆盘从辅助塔移动到目标塔
  hanoi(n-1, aux, to, from);
}

int main() {
  int num_disks;
  cout << "请输入圆盘数量:";
  cin >> num_disks;
  
  // 调用递归函数解决汉诺塔问题
  hanoi(num_disks, 'A', 'C', 'B');
  
  return 0;
}
🎜🎜Output: 🎜🎜
请输入圆盘数量:3
移动盘子 1 从塔 A 到塔 C
移动盘子 2 从塔 A 到塔 B
移动盘子 1 从塔 C 到塔 B
移动盘子 3 从塔 A 到塔 C
移动盘子 1 从塔 B 到塔 A
移动盘子 2 从塔 B 到塔 C
移动盘子 1 从塔 A 到塔 C

Atas ialah kandungan terperinci Pelaksanaan rekursif fungsi C++: Contoh teka-teki klasik rekursi?. 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