C++ 函数递归的应用场景主要包括以下几个方面:
// 二叉树遍历示例
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void traverse(TreeNode* root) {
if (root == NULL) return;
// 处理当前节点
// ...
traverse(root->left); // 递归遍历左子树
traverse(root->right); // 递归遍历右子树
}
// 快速排序示例
int partition(vector<int>& arr, int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivot) {
i++;
swap(arr[i], arr[j]);
}
}
swap(arr[i + 1], arr[high]);
return (i + 1);
}
void quickSort(vector<int>& arr, int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1); // 递归排序左子数组
quickSort(arr, pi + 1, high); // 递归排序右子数组
}
}
// 斐波那契数列示例
int fibonacci(int n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
// 八皇后问题示例
bool isValid(vector<string>& board, int row, int col, int n) {
// 检查同一列是否有皇后
for (int i = 0; i < row; i++) {
if (board[i][col] == 'Q') return false;
}
// 检查左上对角线是否有皇后
int i = row - 1, j = col - 1;
while (i >= 0 && j >= 0) {
if (board[i][j] == 'Q') return false;
i--; j--;
}
// 检查右上对角线是否有皇后
i = row - 1, j = col + 1;
while (i >= 0 && j < n) {
if (board[i][j] == 'Q') return false;
i--; j++;
}
return true;
}
void solveNQueens(vector<string>& board, int row, int n) {
if (row == n) {
// 找到解,输出结果
// ...
return;
}
for (int col = 0; col < n; col++) {
if (isValid(board, row, col, n)) {
board[row][col] = 'Q';
solveNQueens(board, row + 1, n);
board[row][col] = '.'; // 回溯
}
}
}
需要注意的是,递归虽然简洁易懂,但在某些情况下可能会导致栈溢出或者效率低下。在实际应用中,需要根据具体问题选择合适的算法和数据结构,以充分发挥递归的优势。
辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
推荐阅读: c++各种内置类型特点