这段代码为什么输出都是1#include <stdio.h> int josephus(int sum, int number){ if (sum=1){ return 0; }else{ return (josephus(sum-1, number)+number+1)%sum; } } int main() { int sum; //总人数 int number; //报数的数字 int code; //剩下最后一个人的编号 while (scanf("%d", &sum) && scanf("%d", &number) == 1){ code=josephus(sum, number); printf("%d\n", code); } }
时间: 2024-03-11 19:46:48 浏览: 65
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
这段代码输出都是1的原因是因为函数josephus中的判断条件是错误的。在if语句中,应该使用双等号来比较sum和1是否相等,而不是单等号。单等号会把1赋值给sum,导致递归的时候传入的参数不正确,从而得出错误的结果。修改后的代码如下:
```
#include <stdio.h>
int josephus(int sum, int number) {
if (sum == 1) {
return 0;
} else {
return (josephus(sum - 1, number) + number) % sum;
}
}
int main() {
int sum; //总人数
int number; //报数的数字
int code; //剩下最后一个人的编号
while (scanf("%d", &sum) && scanf("%d", &number) == 1) {
code = josephus(sum, number);
printf("%d\n", code);
}
return 0;
}
```
这样修改后,就能得到正确的结果了。
阅读全文