《算法设计与分析》递归算法典型例题.doc

上传人:b****2 文档编号:1640506 上传时间:2022-10-23 格式:DOC 页数:7 大小:302KB
下载 相关 举报
《算法设计与分析》递归算法典型例题.doc_第1页
第1页 / 共7页
《算法设计与分析》递归算法典型例题.doc_第2页
第2页 / 共7页
《算法设计与分析》递归算法典型例题.doc_第3页
第3页 / 共7页
《算法设计与分析》递归算法典型例题.doc_第4页
第4页 / 共7页
《算法设计与分析》递归算法典型例题.doc_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

《算法设计与分析》递归算法典型例题.doc

《《算法设计与分析》递归算法典型例题.doc》由会员分享,可在线阅读,更多相关《《算法设计与分析》递归算法典型例题.doc(7页珍藏版)》请在冰豆网上搜索。

《算法设计与分析》递归算法典型例题.doc

算法递归典型例题

实验一:

递归策略运用练习

三、实验项目

1.运用递归策略设计算法实现下述题目的求解过程。

题目列表如下:

(1)运动会开了N天,一共发出金牌M枚。

第一天发金牌1枚加剩下的七分之一枚,第二天发金牌2枚加剩下的七分之一枚,第3天发金牌3枚加剩下的七分之一枚,以后每天都照此办理。

到了第N天刚好还有金牌N枚,到此金牌全部发完。

编程求N和M。

(2)国王分财产。

某国王临终前给儿子们分财产。

他把财产分为若干份,然后给第一个儿子一份,再加上剩余财产的1/10;给第二个儿子两份,再加上剩余财产的1/10;……;给第i个儿子i份,再加上剩余财产的1/10。

每个儿子都窃窃自喜。

以为得到了父王的偏爱,孰不知国王是“一碗水端平”的。

请用程序回答,老国王共有几个儿子?

财产共分成了多少份?

源程序:

(3)出售金鱼问题:

第一次卖出全部金鱼的一半加二分之一条金鱼;第二次卖出乘余金鱼的三分之一加三分之一条金鱼;第三次卖出剩余金鱼的四分之一加四分之一条金鱼;第四次卖出剩余金鱼的五分之一加五分之一条金鱼;现在还剩下11条金鱼,在出售金鱼时不能把金鱼切开或者有任何破损的。

问这鱼缸里原有多少条金鱼?

(4)某路公共汽车,总共有八站,从一号站发轩时车上已有n位乘客,到了第二站先下一半乘客,再上来了六位乘客;到了第三站也先下一半乘客,再上来了五位乘客,以后每到一站都先下车上已有的一半乘客,再上来了乘客比前一站少一个……,到了终点站车上还有乘客六人,问发车时车上的乘客有多少?

(5)猴子吃桃。

有一群猴子摘来了一批桃子,猴王规定每天只准吃一半加一只(即第二天吃剩下的一半加一只,以此类推),第九天正好吃完,问猴子们摘来了多少桃子?

(6)小华读书。

第一天读了全书的一半加二页,第二天读了剩下的一半加二页,以后天天如此……,第六天读完了最后的三页,问全书有多少页?

(7)日本著名数学游戏专家中村义作教授提出这样一个问题:

父亲将2520个桔子分给六个儿子。

分完后父亲说:

“老大将分给你的桔子的1/8给老二;老二拿到后连同原先的桔子分1/7给老三;老三拿到后连同原先的桔子分1/6给老四;老四拿到后连同原先的桔子分1/5给老五;老五拿到后连同原先的桔子分1/4给老六;老六拿到后连同原先的桔子分1/3给老大”。

结果大家手中的桔子正好一样多。

问六兄弟原来手中各有多少桔子?

四、实验过程

(一)题目一:

……

1.题目分析

由已知可得,运动会最后一天剩余的金牌数gold等于运动会举行的天数由此可倒推每一天的金牌剩余数,且每天的金牌数应为6的倍数。

2.算法构造

设运动会举行了N天,

If(i==N)Gold[i]=N;

Elsegold[i]=gold[i+1]*7/6+i;

3.算法实现

#include //预编译命令

usingnamespacestd;

voidmain() //主函数

{

inti=0,count=0;//count表示运动会举办的天数

intgold[100];//定义储存数组

do

{

count=count+6;//运动会天数加六

gold[count]=count;

for(i=count-1;i>=1;i--)

{

if(gold[i+1]%6!

=0)

break; //跳出for循环

else

gold[i]=gold[i+1]*7/6+i;//计算第i天剩余的金牌数

}

}while(i>=1);//当i>=1继续做do循环

cout<<"运动会开了"<

cout<<"总共发了"<

}

4.运行结果

(二)题目二:

……

1.题目分析

由已知可得,最后一个儿子得到的遗产份数即为王子数目,由此可得到每个儿子得到的遗产份数,在对遗产数目进行合理性判断可得到符合要求的结果。

2.算法构造

设皇帝有count个王子,

property[count]=count;

for(i=count-1;i>=1;i--)

{

if(property[i+1]%9!

=0)

break; //数目不符跳出for循环

else

property[i]=property[i+1]*10/9+i;//计算到第i个王子时剩余份数

}

3.算法实现

#include //预编译命令

usingnamespacestd;

voidmain() //主函数

{

inti=0,count=0;//count表示国王的儿子数

intproperty[100];//定义储存数组,表示分配到每个王子时剩余份数

do

{

count=count+9;//王子数目为9的倍数

property[count]=count;

for(i=count-1;i>=1;i--)

{

if(property[i+1]%9!

=0)

break; //数目不符跳出for循环

else

property[i]=property[i+1]*10/9+i;//计算到第i个王子时剩余份数

}

}while(i>=1);//当i>=1继续做do循环

cout<<"皇帝有"<

cout<<"遗产被分成"<

}

4.运行结果

(三)题目三:

……

1.题目分析

由最后一天的金鱼数目,可递推得到每天的金鱼数目,第一天的数目即为金鱼总数。

2.算法构造

fish[5]=11;

for(i=4;i>=1;i--)

fish[i]=(fish[i+1]*(i+1)+1)/i;//计算到第i天剩余金鱼条数

3.算法实现

#include //预编译命令

usingnamespacestd;

voidmain() //主函数

{

inti=0;

intfish[6];//定义储存数组各天剩余金鱼数

fish[5]=11;

for(i=4;i>=1;i--)

fish[i]=(fish[i+1]*(i+1)+1)/i;//计算到第i天剩余金鱼条数

cout<<"浴缸里原有金鱼"<

}

4.运行结果

(四)题目四:

……

1.题目分析

有到终点站时车上的乘客数可求得到任意一站的乘客人数,到第二站时车上的乘客数目即为发车时车上的乘客数。

2.算法构造

num[8]=6;//到终点站车上还有六人

for(i=7;i>=2;i--)

num[i]=2*(num[i+1]-8+i);//计算到第i站车上的人数

3.算法实现

#include //预编译命令

usingnamespacestd;

voidmain() //主函数

{

inti=0;

intnum[9];//定义储存数组

num[8]=6;//到终点站车上还有六人

for(i=7;i>=2;i--)

num[i]=2*(num[i+1]-8+i);//计算到第i站车上的人数

cout<<"发车时车上有"<

}

4.运行结果

(五)题目五:

……

1.题目分析

可假设有第十天,则第十天剩余的桃子数目为0,由此递推可得每一天剩余的桃子数目。

第一天的桃子数目即为猴子摘桃子的总数。

2.算法构造

num[10]=0;//第n天吃前的桃子数

for(i=9;i>=1;i--)

3.算法实现

num[i]=2*(num[i+1]+1);//计算到第i天剩余的桃子数算法实现

#include //预编译命令

usingnamespacestd;

voidmain() //主函数

{

inti=0;

intnum[11];//定义储存数组

num[10]=0;//第n天吃前的桃子数

for(i=9;i>=1;i--)

num[i]=2*(num[i+1]+1);//计算到第i天剩余的桃子数

cout<<"猴子共摘来了"<

}

4.运行结果

(六)题目六:

……

1.题目分析

由第六天剩余的页数可递推得到每天的剩余页数,第一天的页数即为全书的页数

2.算法构造

num[6]=3;//到第n天时剩余的页数

for(i=5;i>=1;i--)

num[i]=2*(num[i+1]+2);//计算到第i天剩余的页数

3.算法实现

#include //预编译命令

usingnamespacestd;

voidmain() //主函数

{

inti=0;

intnum[7];//定义储存数组

num[6]=3;//到第n天时剩余的页数

for(i=5;i>=1;i--)

num[i]=2*(num[i+1]+2);//计算到第i天剩余的页数

cout<<"全书共有"<

}

4.运行结果

(七)题目七:

……

1.题目分析

由已知可得,第一个儿子得到的橘子数目为平均数的一半,由此可得到第一个儿子原先的橘子数目,而第i个儿子原先的橘

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1