用c语言递推法解决捕鱼知多少问题,要求输出每一个人醒来时看到的鱼的数量
时间: 2024-10-08 22:05:07 浏览: 50
在C语言中,我们可以使用递归算法来解决“捕鱼知多少”的问题,也称为斐波那契数列的问题,因为这个问题通常涉及到类似递归计算每个时刻鱼塘里鱼的数量。这个问题的基本规则是:每次捕捞完鱼后,剩余的鱼会分裂成原来的一半(向上取整),直到鱼的数量少于或等于2。
下面是一个简单的递归函数来解决这个问题:
```c
#include <stdio.h>
int fishCaught(int remainingFish) {
// 基础情况:如果剩余鱼少于等于1,那么捕捞后就剩下0
if (remainingFish <= 1)
return 0;
// 根据规则,捕捞一次后,剩下的鱼就是当前数量的一半
int newFish = remainingFish / 2;
int caught = 1; // 每次捕捞都会减少1条鱼
// 如果剩余鱼能被2整除,那么实际上还能再捕一条鱼
if (remainingFish % 2 == 0)
caught += fishCaught(newFish); // 递归调用
return caught;
}
int main() {
int initialFish = 5; // 初始鱼塘里的鱼
for (int i = 1; i <= 10; ++i) { // 假设观察10天
printf("第%d天醒来时,可以看到的鱼数量:%d\n", i, fishCaught(initialFish));
initialFish = fishCaught(initialFish); // 更新初始鱼数为当天捕获后的数量
}
return 0;
}
```
在这个程序中,`fishCaught()` 函数会返回在给定剩余鱼数时捕捞一天后的总鱼数。在`main()` 中,我们循环调用这个函数,每天更新初始鱼数,并打印出每一天醒来时能看到的鱼的数量。
阅读全文