递推与递归练习题

递推与递归练习题

ID:17653170

大小:44.50 KB

页数:8页

时间:2018-09-04

递推与递归练习题_第1页
递推与递归练习题_第2页
递推与递归练习题_第3页
递推与递归练习题_第4页
递推与递归练习题_第5页
资源描述:

《递推与递归练习题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、练习1.(用递归做)5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。2.(用递归做)商人渡河问题是这样的:有三个商人,三个强盗,和一条船(船每次只可以载小于等于两个人)他们同在河的一边,想渡过河去,但是必须保证在河的任何一边必须保证商人的数目大于等于强盗的数目,应该怎么过这条河呢?注意:开始时商人,

2、强盗所在的河的这边设为0状态,另一边设为1状态(也就是船开始时的一边设为0,当船驶到对岸是设为1状态,在这两个状态时,都必须符合条件)3.(用递推做)猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个。到第30天早上想再吃时,见只剩下1个桃子了。求第一天共摘了多少。4.(用递推做)已知一对兔子每一个月能生一对小兔子,而一对小兔子出生后第二个月就开始生小兔子,假如一年内没有发生死亡,则以对兔子一年能繁殖成多少对?答案:1.#includeintage(intn){if(n=

3、=1)return(10);elsereturnage(n-1)+2;}voidmain(){intn;n=5;printf("Thefifthageis%d.",age(n));}2.#include#include#includestructnode/*建立一个类似栈的数据结构并且可以浏览每一个数据点*/{intx;inty;intstate;structnode*next;};typedefstructnodestate;typedefstate*link;linkPPointer1=NULL;linkPPointer2=N

4、ULL;inta1,b1;inta2,b2;/*栈中每个数据都分为0,1状态*/voidPush(inta,intb,intn){linknewnode;newnode=(link)malloc(sizeof(state));newnode->x=a;newnode->y=b;newnode->state=n;newnode->next=NULL;if(PPointer1==NULL){PPointer1=newnode;PPointer2=newnode;}else{PPointer2->next=newnode;PPointer2=newnode;}}voidPop()/*弹栈*/{l

5、inkpointer;if(PPointer1==PPointer2){free(PPointer1);PPointer1=NULL;PPointer2=NULL;}pointer=PPointer1;while(pointer->next!=PPointer2)pointer=pointer->next;free(PPointer2);PPointer2=pointer;PPointer2->next=NULL;}inthistory(inta,intb,intn)/*比较输入的数据和栈中是否有重复的*/{linkpointer;if(PPointer1==NULL)return1;el

6、se{pointer=PPointer1;while(pointer!=NULL){if(pointer->x==a&&pointer->y==b&&pointer->state==n)return0;pointer=pointer->next;}return1;}}intjudge(inta,intb,intc,intd,intn)/*判断这个状态是否可行,其中使用了history函*/{if(history(a,b,n)==0)return0;if(a>=0&&b>=0&&a<=3&&b<=3&&c>=0&&d>=0&&c<=3&&d<=3&&a+c==3&&b+d==3){switc

7、h(n){case1:{if(a==3){Push(a,b,n);return1;}elseif(a==0){Push(a,b,n);return1;}elseif(a==b){Push(a,b,n);return1;}elsereturn0;}case0:{if(a==3){Push(a,b,n);return1;}elseif(a==0){Push(a,b,n);return1;}elseif(a>=b){Push(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。