## 1.题目描述
一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
2.分析
根据题目我们可以很容易的看出:
经过第7个村子时,农夫手里的鸭子是2只;
经过第6个村子时,农夫手里的鸭子是((2+1)*2)=6只;
经过第5个村子时,农夫手里的鸭子是((6+1)*2)=14只;
经过第4个村子时,农夫手里的鸭子是((14+1)*2)=30只;
…
…
所以假设农夫在经过第n+1个村子时剩余m只鸭子,那么他在第n个村子还剩余((m+1)*2)只鸭子,卖掉了(m+2)只鸭子。
3.代码实现
</
#include <stdio.h>
int main()
{
int f(int n); //n为农夫经过的第n个村庄
f(1); //经过第一个村庄
return 0;
}
int f(int n)
{
int m; //m为经过第n个村庄时剩余的鸭子数
if(n==7)
{
m=2;
printf(“在经过第%d个村庄时还剩下%d只鸭子\n”,n,m);
}
else //每经过一个村庄卖掉剩余鸭子的一半加一个
{
m=(f(n+1)+1)*2; //则若经过第n+1个村庄时剩余鸭子m只,
//那么在第n个村庄的鸭子剩余数为(m+1)*2
printf(“经过第%d个村庄时还剩下%d只鸭子\t卖了%d只鸭子,\n”,
n,m,(m/2+1));
}
return m;
}
>