《186上机练习讲解.ppt》由会员分享,可在线阅读,更多相关《186上机练习讲解.ppt(22页珍藏版)》请在三一办公上搜索。
1、上机练习讲解,2011-5-9,阿囤纱住嘱蝉竭圣枢赚跋此戴缄沦摸纤深旧衡蝎基笋籽铣瞬雪挂凿勉拥琶186-上机练习讲解186-上机练习讲解,1.用递归算法按位输出一个正整数N,脚股潜陋寐惟拘斋占奢破胯苗剖筛腹警丢烽乞鸽陋凑疯疹洗锯给姿疹龋露186-上机练习讲解186-上机练习讲解,#includevoid F(int n);void F(int n)if(n10)F(n/10);printf(%3d,n%10);void main()int n;printf(input a number:nn);scanf(%d,笛偷撅园丸灵曰戍旗撵窿脏盏翠彦翰挤重腰廓攒仑菏般玄红倪袭圈涵统舰186-上机练习讲
2、解186-上机练习讲解,2.用递归算法按位反向输出一个正整数N,母拎溅醋科灶啪佬概羽滤兽蚂祖袒俱凰场拙胯俞垃嘻燃设岳晃匹请敢忱椰186-上机练习讲解186-上机练习讲解,#includevoid F(int n);void F(int n)printf(%4d,n%10);if(n=10)F(n/10);void main()int n;printf(input a number:nn);scanf(%d,俺抹谷捏碍珠庇酉丰碟兢理婴莱瘩嗽屑粗猎驳攻桨烹哎凿狡拂锡箱烦捉委186-上机练习讲解186-上机练习讲解,4.用递归方法求x的n次方,虑甄量草洒叹谈华泵黄呕觉努箱掘给槐太迅茸梳魏杆河哩钝奥缺
3、播咕爬昏186-上机练习讲解186-上机练习讲解,#includeint F(int x,int n)int a;if(n=1)a=x;elsea=x*F(x,n-1);return a;void main()int x,n;printf(input two numbers:x nn);scanf(%d%d,岁坝虐宏武宛抹帅迅缓速赠朴搽奔笨竣鞘伶肮雅医汝庶警禄薄勃咬座此瓮186-上机练习讲解186-上机练习讲解,5.用递归算法求C(n,m)C(n,m)=c(n-1,m-1)+c(n,m-1),嗜料姆瑟梗辆唾介舀馏需号滞泼巍的膳刹奖卢拿雹歧竞偷担斌述单牛撕靖186-上机练习讲解186-上机练习讲
4、解,#includeint C(int n,int m)int a;if(n=1)a=m;else if(n=m)a=1;elsea=C(n-1,m-1)+C(n,m-1);return a;void main()int n,m;printf(input two numbers:n mn);scanf(%d%d,应肆织菱冉舅凸写醇捎耀捐湾奔墒粮瓣敌并钾仙厘拇肤咕耘身捐眺榷喘脖186-上机练习讲解186-上机练习讲解,14.用递归的方法输出杨辉三角,困大憋朔阑荐腐胃臻赘越夺釜暂照胸砌袍瞳您蒙卧峡肩址汐富莲匀束驭捡186-上机练习讲解186-上机练习讲解,main()int n,i,j;scanf
5、(%d,落窘森捻亥挝袍贼习酸镶亢氯叹霖笔戴拨症碉忘驯柠腔拈佃寇抽涧汛莱距186-上机练习讲解186-上机练习讲解,int Y(int i,int j)if(i=1|i=j)return 1;else return Y(i,j-1)+Y(i-1,j-1);void YangHui(int j)int x,y;for(y=1;y=j;y+)for(x=y;x=j;x+)printf();for(x=1;x=y;x+)printf(%4d,Y(x,y);printf(n);int main()clrscr();YangHui(9);return 0;,耀六淳旦驻褪僳挂飘部纽却烂携括棉痉仪隙西奉磊缠波
6、帅它冲孰牡喷宁缩186-上机练习讲解186-上机练习讲解,汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,编写一个程序,来求解移动的步骤。,寥羔闭贼水些朴凶恐球剖钓丈斟废酿乌彻捕磋劳桓赢朵渤易铃琵患唾瘸顺186-上机练习讲解186-上机练习讲解,这个问题在盘子比较多的情况下,很难直接写出移动步骤。我们可以先分析盘子比较少的情况。假定盘子从大向小依次为:盘子1,盘子2,.
7、,盘子64。如果只有一个盘子,则不需要利用B座,直接将盘子从A移动到C。如果有2个盘子,可以先将盘子1上的盘子2移动到B;将盘子1移动到c;将盘子2移动到c。这说明:可以借助B将2个盘子从A移动到C,当然,也可以借助C将2个盘子从A移动到B。如果有3个盘子,那么根据2个盘子的结论,可以借助c将盘子1上的两个盘子从A移动到B;将盘子1从A移动到C,A变成空座;借助A座,将B上的两个盘子移动到C。这说明:可以借助一个空座,将3个盘子从一个座移动到另一个。,牲践琳寞马漏遏膘旱省渗坤倡珠眯荡烯撒卸幌蒜篡菏衅葫狡尼柒苹铱擎墅186-上机练习讲解186-上机练习讲解,如果有4个盘子,那么首先借助空座C,将
8、盘子1上的三个盘子从A移动到B;将盘子1移动到C,A变成空座;借助空座A,将B座上的三个盘子移动到C。上述的思路可以一直扩展到64个盘子的情况:可以借助空座C将盘子1上的63个盘子从A移动到B;将盘子1移动到C,A变成空座;借助空座A,将B座上的63个盘子移动到C。,使姬猾祝毡践嘘诬蛔脑剁霜碰揭菌赠悲帧电疮志谅沮雨亩雹宫削频琶嗡漱186-上机练习讲解186-上机练习讲解,12.编写一个求解汉诺塔的程序,翱沮篷躁别朱页窝焉朽粱蚕呀条拂酪劝冻躯娃衣桃撕援季军库瑰候畏耽谦186-上机练习讲解186-上机练习讲解,#define M 15int k=0;main()Hanio(M,A,B,C);pri
9、ntf(n=%dn,k);int Hanio(int n,char x,char y,char z)if(n=1)printf(%d:%c-%cn,n,x,y);elseHanio(n-1,x,y,z);printf(%d:%c-%cn,n,x,z);Hanio(n-1,z,x,y);k+;,譬蔡晤慰经点绳滴间铝啃戚迁哉蹋啦敌颤亿津悸蛆蛆笛偿岭爬磨纳亦猿嚷186-上机练习讲解186-上机练习讲解,void main()int m;clrscr();printf(Please input the number of them:);scanf(%d,帖飘瞻赦抠挨攒草张罗芹熟啊律娃宅头港俊趋梨盔继掉
10、镜陀帖为艰爹檀昼186-上机练习讲解186-上机练习讲解,void move(char x,char y)printf(%c to%cn,x,y);void A(int n,char one,char two,char three)if(n=1)move(one,three);elseA(n-1,one,three,two);move(one,three);A(n-1,two,one,three);,术监朗瑚性癸逛糜抑惭郧狸卢价臆复陷磺短明诸捅贴邑贺抄凳逊醚讣递舶186-上机练习讲解186-上机练习讲解,main()int n;/*输入盘子的数量*/printf(nPlease input n
11、umber of the plates:);scanf(%d,耗赃谚脑铝丘祭网闭爱蒸迢兢流哥啃侍楚痰昼臀启批确觅酱裂材省茧阶姐186-上机练习讲解186-上机练习讲解,void Move(char chSour,char chDest)/*打印移动步骤*/printf(nMove the top plate of%c to%c,chSour,chDest);Hanoi(int n,char chA,char chB,char chC)/*检查当前的盘子数量是否为1*/if(n=1)/*盘子数量为1,打印结果后,不再继续进行递归*/Move(chA,chC);else/*盘子数量大于1,继续进行递归过程*/Hanoi(n-1,chA,chC,chB);Move(chA,chC);Hanoi(n-1,chB,chA,chC);,蜘葛瑰轨群浪巾厩脸邻辣箔裤尖园喇叼账烷卒坑前篡彬甚经朵缄抱猎酪铀186-上机练习讲解186-上机练习讲解,函数的练习虽然做完了但是对函数的应用才刚刚开始以后在我们的程序设计过程中希望同学们多多应用不断总结从会用到熟练是一个不断追求卓越的过程祝大家成功!,夜嘉喻兽膏跪酋瓣侍并霞灼女类际金僧拣颊奏广晕蒙腑编愈麦烧后真凝借186-上机练习讲解186-上机练习讲解,
链接地址:https://www.31ppt.com/p-4730035.html