资源描述:
《汉诺塔问题与函数递归调用.pptx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、【猜年龄】3岁比第1个大2岁比第2个大2岁比第3个大2岁比第4个大2岁age(4)+2age(3)+2age(2)+2age(1)+2第5个小朋友几岁?一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。递归调用定义:一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。递归函数调用定义:算法设计如下:1、编写求年龄的函数age;2、判断n=1时,返回值3;3、判断n≥2时,函数age调用age(n-1)+2;intage(intn)//求年龄函数{}if(n==1)return3;elsereturnage(n-1)+2;函数程序如下:4、编写主调函
2、数,调用递归函数。main()//主函数{intfage;fage=age(5);printf(“第五个小朋友的年龄为%d岁",fage);}//递归函数调用自身一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。递归函数调用定义:源程序如下:调用过程如下:age(5)=age(4)+2age(3)+2age(2)+2age(1)+233+2=55+2=77+2=99+2=11语句编写intage(intn)//求年龄函数{}if(n==1)return3;main()//主函数{intfage;fage=age(5);printf(“第五个小朋友的年龄为%d岁
3、",age);}运行结果第五个小朋友的年龄为11岁elsereturnage(n-1)+2;【汉诺塔游戏】有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求将所有圆盘移至C杆。移动的过程始终保持大盘在下,小盘在上的原则。ACBACB实例分析如下:1、AC【汉诺塔游戏】有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求将所有圆盘移至C杆。移动的过程始终保持大盘在下,小盘在上的原则。ACB实例分析如下:1、AB2、AC3、BC【汉诺塔游戏】有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到
4、上依次变小。要求将所有圆盘移至C杆。移动的过程始终保持大盘在下,小盘在上的原则。ACB实例分析如下:1、AC2、AB3、CB4、AC5、BA6、BC7、AC2个盘子从AB2个盘子从BC【汉诺塔游戏】有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求将所有圆盘移至C杆。移动的过程始终保持大盘在下,小盘在上的原则。1、AC只有1个盘子时:2个盘子时:1、AB2、AC3、BC3个盘子时:1、AC2、AB3、CB4、AC5、BA6、BC7、AC函数源程序如下:语句编写voidhanoi(intn,charA,char
5、B,charC){}if(n==1)printf("%c->%c",A,C);2个盘子从AB2个盘子从BC4个盘子时:2、AC1、3个盘子从AB3、3个盘子从BC2、AB1、2个盘子从AC3、2个盘子从CB2、BC1、2个盘子从BA3、2个盘子从AC1、AB2、AC3、BC4、AB5、CA6、CB7、AB8、AC9、BC10、BA11、CA13、AB14、AC15、BC12、BC函数源程序如下:voidhanoi(intn,charA,charB,charC){}if(n==1)printf("%c->%c",A,C);函
6、数源程序如下:voidhanoi(intn,charA,charB,charC){}if(n==1)printf("%c->%c",A,C);多个盘子算法设计如下:1、把n-1个盘子由AB2、把第n个盘子由AC3、把n-1个盘子由BCmain()//主函数{intn;scanf("%d",&n);hanoi(n,'A','B','C');}else{hanoi(n-1,A,C,B);printf("%c->%c",A,C);hanoi(n-1,B,A,C);}运行结果3A->CA->BC->BA->CB->AB->CA->CSUMMARY总结