首頁 > 後端開發 > C++ > C++ 函式的遞歸實作:遞歸的經典謎題範例?

C++ 函式的遞歸實作:遞歸的經典謎題範例?

PHPz
發布: 2024-04-22 15:27:02
原創
954 人瀏覽過

遞歸是一種程式設計技術,它允許函數呼叫自身以解決複雜問題,透過分解成子問題來實現。實戰案例中,漢諾塔謎題的遞歸實現:1. 當只有一個圓盤時,直接移動到目標塔。 2. 將小圓盤移到輔助塔。 3. 移動最大圓盤到目標塔。 4. 將小圓盤從輔助塔移動到目標塔。

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

C 函數的遞歸實現:經典謎題範例

#遞歸是一種程式設計技術,它允許函數呼叫自身以解決問題。這適用於需要分解為子問題的複雜問題。

遞迴函數的語法

在C 中,遞迴函數的語法如下:

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

其中:

  • ##return_type 是函數傳回的類型。
  • function_name 是函數的名稱。
  • parameter_list 是傳遞給函數的參數清單。
  • base_condition 是遞歸的基準情況,它決定函數的遞迴循環何時結束。
  • base_result 是當基準狀況為 true 時函數傳回的結果。
  • updated_pa​​rameter_list 是在遞歸呼叫函數時更新的參數清單。
實戰案例:漢諾塔

漢諾塔是一個經典的遞歸謎題。它有三個塔,每個塔上都有不同的數量的圓盤。目標是從第一個塔將所有圓盤移動到第三個塔上,同時確保較小的圓盤始終在較大的圓盤之上。

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;
}
登入後複製

輸出:

请输入圆盘数量:3
移动盘子 1 从塔 A 到塔 C
移动盘子 2 从塔 A 到塔 B
移动盘子 1 从塔 C 到塔 B
移动盘子 3 从塔 A 到塔 C
移动盘子 1 从塔 B 到塔 A
移动盘子 2 从塔 B 到塔 C
移动盘子 1 从塔 A 到塔 C
登入後複製

以上是C++ 函式的遞歸實作:遞歸的經典謎題範例?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板