约瑟夫环c++代码递归
时间: 2024-12-24 16:01:23 浏览: 25
约瑟夫环(Josephus Problem),也被称为隔数删除问题,是一个经典问题,通常涉及在一个圈子里的人按照特定间隔轮流被剔除。在C++中,可以使用递归来解决这个问题。下面是一个简单的递归函数实现:
```cpp
#include <iostream>
int josephus(int n, int k) {
if (n == 1) { // 如果只剩一个人,直接返回0,表示不用剔除
return 0;
}
return (josephus(n - 1, k) + 1) % n; // 递归调用,k作为跳过的人数,每次增加1并取模n保持在圈子内
}
int main() {
int people, skip;
std::cout << "请输入人数(大于1): ";
std::cin >> people;
std::cout << "请输入跳过的人数: ";
std::cin >> skip;
if (skip > people) {
std::cerr << "跳过人数不能超过总人数!" << std::endl;
return -1; // 跳过人数错误处理
}
int position = josephus(people, skip);
std::cout << "第" << position+1 << "个人将被剔除。\n";
return 0;
}
```
在这个代码中,`n`代表圈子中的人数,`k`代表需要跳过的人数。当n等于1时,游戏结束,最后剩下的人就是结果。函数`josephus`通过递归计算出最终位置。
阅读全文