2案例引入【猜年龄】3岁比第1个大2岁比第2个大2岁比第3个大2岁比第4个大2岁age(4)+2age(3)+2age(2)+2age(1)+2第5个小朋友几岁?3案例分析一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。递归调用定义:4案例分析一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。递归函数调用定义:算法设计如下: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、编写主调函数,调用递归函数。main()//主函数{intfage;fage=age(5);printf(“第五个小朋友的年龄为%d岁\n,fage);}//递归函数调用自身5案例实现一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。递归函数调用定义:源程序如下:调用过程如下: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岁\n,age);}运行结果第五个小朋友的年龄为11岁elsereturnage(n-1)+2;6应用实例【汉诺塔游戏】有三根杆子A,B,C。A杆上有N个(N1)穿孔圆盘,盘的尺寸由下到上依次变小。要求将所有圆盘移至C杆。移动的过程始终保持大盘在下,小盘在上的原则。ACB7应用实例ACB实例分析如下:1、AC【汉诺塔游戏】有三根杆子A,B,C。A杆上有N个(N1)穿孔圆盘,盘的尺寸由下到上依次变小。要求将所有圆盘移至C杆。移动的过程始终保持大盘在下,小盘在上的原则。8应用实例ACB实例分析如下:1、AB2、AC3、BC【汉诺塔游戏】有三根杆子A,B,C。A杆上有N个(N1)穿孔圆盘,盘的尺寸由下到上依次变小。要求将所有圆盘移至C杆。移动的过程始终保持大盘在下,小盘在上的原则。9应用实例ACB实例分析如下:1、AC2、AB3、CB4、AC5、BA6、BC7、AC2个盘子从AB2个盘子从BC【汉诺塔游戏】有三根杆子A,B,C。A杆上有N个(N1)穿孔圆盘,盘的尺寸由下到上依次变小。要求将所有圆盘移至C杆。移动的过程始终保持大盘在下,小盘在上的原则。10应用实例1、AC只有1个盘子时:2个盘子时:1、AB2、AC3、BC3个盘子时:1、AC2、AB3、CB4、AC5、BA6、BC7、AC函数源程序如下:语句编写voidhanoi(intn,charA,charB,charC){}if(n==1)printf(%c-%c\n,A,C);2个盘子从AB2个盘子从BC11应用实例4个盘子时: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\n,A,C);12应用实例函数源程序如下:voidhanoi(intn,charA,charB,charC){}if(n==1)printf(%c-%c\n,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\n,A,C);hanoi(n-1,B,A,C);}运行结果3A-CA-BC-BA-CB-AB-CA-C谢谢!单击此处添加文字内容1案例引入递归调用定义单击此处添加文字内容2案例分析使用递归实现单击此处添加文字内容3递归调用应用实例SUMMARY总结