c++这题请用递归写
时间: 2024-10-19 08:16:24 浏览: 12
c++递归/递推经典题目
在C++中,递归是一种解决问题的有效技术,特别是对于需要分治的场景,如组合问题。递归版本的代码通常更简洁,但是需要注意控制好递归深度以防止栈溢出。以下是递归方式实现找出5个数中取3个数的所有组合的例子:
```cpp
#include <iostream>
// 递归函数,返回值类型为void是因为我们只关心组合的输出,不需要返回结果
void generateCombination(int nums[], int start, int end, int index, int r) {
if (index == r) {
// 当已经选择了r个数,就输出这个组合
for (int i = 0; i < r; i++) {
cout << nums[index - i] << " ";
}
cout << endl;
return;
}
// 递归地尝试下一个数作为组合的一部分
for (int i = start; i <= end && end - i + 1 >= r - index; i++) {
swap(nums[index], nums[i]); // 将当前数放入组合
generateCombination(nums, i + 1, end, index + 1, r); // 递归调用
swap(nums[index], nums[i]); // 撤销操作,回溯到上一层递归
}
}
int main() {
int n = 5, r = 3;
int numbers[] = {1, 2, 3, 4, 5};
generateCombination(numbers, 0, n - 1, 0, r);
return 0;
}
```
这段代码首先检查是否已经选择了所需的数量(`index == r`),如果达到,则打印组合并结束递归。否则,遍历剩余未选择的元素,并尝试将其加入组合,然后递归处理剩余部分。
阅读全文