资源描述
2018/10/5,#,【,猜年龄,】,3,岁,比第,1,个大,2,岁,比第,2,个大,2,岁,比第,3,个大,2,岁,比第,4,个大,2,岁,age(4)+2,age(3)+2,age(2)+2,age(1)+2,第,5,个小朋友几岁?,一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。,递归调用定义:,一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。,递归函数调用定义,:,算法,设计如下:,1,、编写,求年龄的,函数,age,;,2,、,判断,n=1时,,返回值3;,3,、判断,n2,时,,函数,age,调用,age(n-1)+2,;,int age(int n)/,求年龄函数,if(n=1),return 3;,else,return age(n-1)+2;,函数程序如下:,4,、编写主调函数,调用递归函数。,main()/,主函数,int,fage,;,fage=age(5,);,printf(“,第五个小朋友的年龄为,%,d,岁,n,f,age,);,/,递归函数调用自身,一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。,递归函数调用定义:,源程序,如下,:,调用,过程如下:,age(5)=age(4)+2,age(3)+2,age(2)+2,age(1)+2,3,3+2=5,5+2=7,7+2=9,9+2=11,语句编写,int age(int n)/,求,年龄,函数,if(n=1),return 3;,main()/,主函数,int fage;,fage=age(5);,printf(“,第五个小朋友的年龄为,%,d,岁,n,age);,运行结果,第五个小朋友的年龄,为,11,岁,else,return age(n-1)+2;,【,汉诺塔游戏,】,有,三根杆子,A,,,B,,,C,。,A,杆上有,N,个,(N1),穿孔圆盘,盘的尺寸由下到上依次变小。,要求将,所有圆盘移至,C,杆,。移动的过程始终保持大盘在下,小盘在上的原则。,A,C,B,A,C,B,实例分析如下,:,1,、,A,C,【,汉诺塔游戏,】,有,三根杆子,A,,,B,,,C,。,A,杆上有,N,个,(N1),穿孔圆盘,盘的尺寸由下到上依次变小。,要求将,所有圆盘移至,C,杆,。移动的过程始终保持大盘在下,小盘在上的原则。,A,C,B,实例分析如下,:,1,、,A,B,2,、,A,C,3,、,B,C,【,汉诺塔游戏,】,有,三根杆子,A,,,B,,,C,。,A,杆上有,N,个,(N1),穿孔圆盘,盘的尺寸由下到上依次变小。,要求将,所有圆盘移至,C,杆,。移动的过程始终保持大盘在下,小盘在上的原则。,A,C,B,实例分析如下,:,1,、,A,C,2,、,A,B,3,、,C,B,4,、,A,C,5,、,B,A,6,、,B,C,7,、,A,C,2,个盘子从,A,B,2,个盘子从,B,C,【,汉诺塔游戏,】,有,三根杆子,A,,,B,,,C,。,A,杆上有,N,个,(N1),穿孔圆盘,盘的尺寸由下到上依次变小。,要求将,所有圆盘移至,C,杆,。移动的过程始终保持大盘在下,小盘在上的原则。,1,、,A,C,只有,1,个盘子时:,2,个盘子时:,1,、,A,B,2,、,A,C,3,、,B,C,3,个盘子时:,1,、,A,C,2,、,A,B,3,、,C,B,4,、,A,C,5,、,B,A,6,、,B,C,7,、,A,C,函数源程序如下,:,语句编写,void hanoi(int n,char A,char B,char C),if(n=1),printf(%c-%cn,A,C,);,2,个盘子从,A,B,2,个盘子从,B,C,4,个盘子时:,2,、,A,C,1,、,3,个盘子从,A,B,3,、,3,个盘子从,B,C,2,、,A,B,1,、,2,个盘子从,A,C,3,、,2,个盘子从,C,B,2,、,B,C,1,、,2,个盘子从,B,A,3,、,2,个盘子从,A,C,1,、,A,B,2,、,A,C,3,、,B C,4,、,A,B,5,、,C,A,6,、,C,B,7,、,A B,8,、,A,C,9,、,B,C,10,、,B,A,11,、,C A,13,、,A,B,14,、,A,C,15,、,B C,12,、,B,C,函数源程序如下,:,void hanoi(int n,char A,char B,char C),if(n=1),printf(%c-%cn,A,C,);,函数源程序如下,:,void hanoi(int n,char A,char B,char C),if(n=1),printf(%c-%cn,A,C,);,多个盘子算法设计如下,:,1,、把,n-1,个盘子由,A,B,2,、把第,n,个盘子由,A,C,3,、,把,n-1,个盘子,由,B,C,main()/,主函数,int,n;,scanf,(%d,hanoi(n,A,B,C,);,else,hanoi(n-1,A,C,B,);,printf(%c-,%,cn,A,C,);,hanoi(n-1,B,A,C);,运行结果,3,A-C,A-B,C-B,A-C,B-A,B-C,A-C,SUMMARY,总结,
展开阅读全文