问题描述:一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
(1)题目分析:
设经过第n个村子时有count(n)只鸭子,卖去count(n)/2+1只鸭子,剩下count(n+1)只鸭子,则有count(n)=count(n)/2+1+count(n+1),即count(n)=2*(count(n+1)+1)。经过第8个村子时有2只鸭子,即count(8)=2。出发时共赶count(1)只鸭子,经过第n个村子时卖出count(n)/2+1只鸭子。
(2)算法构造:
count(n)=2*(count(n+1)+1) ,1<=n<8
count(n)=2 , n=8
程序源代码:
#include<iostream>
using namespace std;
int count(int n) //经过第n个村子之前有count(n)只鸭子
{
if(n==8) //递归出口
return 2;
else
return 2*(count(n+1)+1); //递归体
}
void main()
{
cout<<“出发时共赶”<<count(1)<<“只鸭子”<<endl;
for(int i=1;i<8;i++)
{
cout<<“经过第”<<i<<“个村子卖出”<<count(i)/2+1<<“只鸭子”<<endl;
}
}