遞歸是一種程式設計技術,它允許函數呼叫自身以解決複雜問題,透過分解成子問題來實現。實戰案例中,漢諾塔謎題的遞歸實現:1. 當只有一個圓盤時,直接移動到目標塔。 2. 將小圓盤移到輔助塔。 3. 移動最大圓盤到目標塔。 4. 將小圓盤從輔助塔移動到目標塔。
#遞歸是一種程式設計技術,它允許函數呼叫自身以解決問題。這適用於需要分解為子問題的複雜問題。
在C 中,遞迴函數的語法如下:
return_type function_name(parameter_list) { // 处理基线情况 if (base_condition) { return base_result; } // 处理递归情况 return function_name(updated_parameter_list); }
其中:
是函數傳回的類型。
是函數的名稱。
是傳遞給函數的參數清單。
是遞歸的基準情況,它決定函數的遞迴循環何時結束。
是當基準狀況為
true 時函數傳回的結果。
是在遞歸呼叫函數時更新的參數清單。
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中文網其他相關文章!