賣桃子
問題:
一筐桃子,第一天買掉一半又吃掉一個;第二天買掉余下的一半又吃掉一個;
第三天,第四天,第五天以後都照此辦理,最後剩下1個,問筐中共有多少個桃子.
解答:
用遞歸的方法求解,源程序如下:
#include <iostream.h>
void main()
{
int i,remaining=1,day;
cout<<"請輸入賣桃子的天數:"<<endl;
cin>>day;
cout<<endl;
for(i=1;i<=day;i++)
{
remaining=2*remaining+2;
}
cout<<"原有桃子的總數為:"<<endl;
cout<<remaining<<endl;
}
另外一個相似的問題:
遞推捕魚的問題
問題:
A,B,C,D,E合伙夜間捕魚,凌晨是都疲憊不堪,各自啊在河邊的樹叢中找地方睡著了。
日上三竿,A第一個醒來,他將魚平分為5分,把多余的一條扔回湖中,拿自己的一份回家
去了;B第二個醒來,也將魚平分為5分,扔掉多余的一條,只拿走自己的一分;接著C,D,
E依次醒來,也都按同樣的辦法分魚。問5人至少合伙捕到多少條魚?每個人醒來後所看到的
魚數是多少條?
//編制時間:2004年11月22日
//主要功能:遞歸算法的事例
//編制人:周峰
其中的一組解也是最小解為:
621
496
396
316
252
程序的解不是唯一的,設定不同的fish[0]值就可能得到不同的解,比如說fish[0]=721時
就可得到另一組解
1246
996
796
636
252
程序的原代碼:
#include <iostream.h>
void main()
{
int fish[5]={721,1,1,1,1};
int i;
do
{
for(i=0;i<=3;i++)
{ if((fish[i]-1)%5==0)
fish[i+1]=(fish[i]-1)*4/5;
else
break;
}
fish[0]+=5;
}
while(i<=3);
fish[0]-=5;
for(i=0;i<=4;i++)
{
cout<<fish[i]<<endl;
}
}