用C语言递归x解法写一个约瑟夫环
时间: 2023-12-29 15:52:26 浏览: 30
好的,以下是用C语言递归方法实现约瑟夫环问题的代码:
```
#include <stdio.h>
int josephus(int n, int k) {
if(n == 1) {
return 1;
} else {
return (josephus(n - 1, k) + k - 1) % n + 1;
}
}
int main() {
int n = 7; // 总共有7个人
int k = 3; // 每k个人淘汰一个
int surviver = josephus(n, k);
printf("The last surviver is: %d\n", surviver);
return 0;
}
```
注意此代码通过递归方法实现,可以输出为任意人数和淘汰规则的结果。
相关问题
用C语言实现约瑟夫环 要求递归解法
好的,我可以回答这个问题。约瑟夫环是一个经典的问题,可以使用递归方式解决。
下面是一个使用C语言实现的递归解法:
```c
#include <stdio.h>
int josephus(int n, int k)
{
if (n == 1)
return 1;
else
return (josephus(n-1, k) + k-1) % n + 1;
}
int main()
{
int n = 14;
int k = 3;
printf("约瑟夫环问题:\n");
printf("总人数n = %d, 每k个人出圈\n", n);
printf("最后一个出圈的人的编号为:%d\n", josephus(n, k));
return 0;
}
```
这段代码可以求解约瑟夫环问题,当 n=14, k=3 时,输出结果为:
```
约瑟夫环问题:
总人数n = 14, 每k个人出圈
最后一个出圈的人的编号为:13
```
希望能够帮助到你。
c语言递归写一个斐波那契数列
当然可以!以下是用C语言递归方式实现斐波那契数列的代码:
```c
#include<stdio.h>
int fibonacci(int n) {
if (n <= 1) {
return n;
}
return fibonacci(n-1) + fibonacci(n-2);
}
int main() {
int n;
printf("请输入斐波那契数列的项数:");
scanf("%d", &n);
printf("斐波那契数列的前 %d 项为:\n", n);
for (int i = 0; i < n; i++) {
printf("%d ", fibonacci(i));
}
return 0;
}
```
这段代码中,`fibonacci` 函数使用递归的方式计算斐波那契数列的第 `n` 项。当 `n` 小于等于1时,直接返回 `n`。当 `n` 大于1时,递归调用 `fibonacci` 函数计算第 `n-1` 项和第 `n-2` 项的和作为结果返回。
在 `main` 函数中,我们首先获取用户输入的项数,然后使用循环调用 `fibonacci` 函数并打印出斐波那契数列的前 `n` 项。
希望对你有帮助!如果还有其他问题,请随时提问。