#includevoidmain(){intmax_4(inta,intb,intc,intd);inta,b,c,d,max;printf("Pleaseenter4intergernumbers:");scanf("%d%d%d%d",&a,&b,&c,&d);max=max_4(a,b,c,d);printf("max=%d\n",max);}intmax_4(inta,intb,intc,intd){intmax_2(inta,intb);intm;m=max_2(a,b);m=max_2(m,c);m=max_2(m,d);return(m);}intmax_2(inta,intb){return(a>b?a:b);}7.67.6函数的递归调用函数的递归调用或a(x){……b();……}b(){……a(y);/*间接的递归调用*/……}C语言中,允许函数直接或间接地调用自己,这种调用方式称为函数的递归调用。C语言的特点之一就在于它允许函数的递归调用。其一般形式为:a(x){……a(y);/*直接的递归调用*/……}intage(intn){intc;if(n==1)c=10;elsec=age(n-1)+2;return(c);}#includevoidmain(){printf("%d\n",age(5));}例7.6有5个人坐在一起,第5个从比第4个人大2岁,第4个比第3个人大2岁,…,第1个人是10岁。问第5个人多大?算法分两个阶段;第一阶段为“回溯”第二阶段为“递推”。不应出现无终止的递归调用,因此,应该给定一个限制递归次数的条件。递归调用对应的一般算法:f(x)=终了公式递归公式#includevoidmain(){longfac(intn);intn;longy;printf("inputanintegernumber:");scanf("%d",&n);y=fac(n);printf("%d!=%ld\n",n,y);}例7.7用递归方法求n!。求n!可以用递推算法,即从1开始,乘2,再乘3,一直乘到n。这种方法容易理解,也容易实现。递推法的特点是从一个已知的事实出发,按一定的规律推出下一个事实,再从这新的已知事实出发,再向下推出一个新的事实。另一种方法是递归算法,即5!=4!X5,4!=3!X4,,1!=1。longfac(intn){longf;if(n<0)printf("n<0,dataerror!");elseif(n==0||n==1)f=1;elsef=fac(n-1)*n;return(f);}例7.8Hanoi(汉诺)塔问题。古代有一个梵塔,塔内有3个座A,B,C,开始时A座上有64个大小不等的盘子,大的在下小的在上。有一个老和尚想把这64个盘子从A座移到C座,但每次只允许移动一个盘子,且在移动的过程中在3个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用B座。为实现以上目标,老和尚:1)、命令第2个和尚将63个盘子从A座移到B座。2)、自己将1个盘(最底下的、最大的盘子)从A座移到C座。3)、再命令第2个和尚将63个盘子从B座移到C座。为解决将63个盘子从A座移到B座,第2个和尚:1)、命令第3个和尚将62个盘子从A座移到C座。2)、自己将1个盘子从A座移到B座。3)、再命令第2个和尚将62个盘子从C座移到B座。如此层层下放,到第63个和尚,让他完成将2个盘子从一个座移到另一个座。第64个各尚将1个盘子从一个座移到另一个座。为便于理解,先分析将A座上3个盘子移到C座上的过程:1、将A座上的2个盘子移到B座上(借助C)。2、将A座上1个盘子移到C座上。3、将B座上2个盘子移到C座上(借助A)。其中第2步可以直接实现,第1步又可以用递归方法分解为:1)、将A上1个盘子从A座移到C座。2)、将A上1个盘子从A座移到B座。3)、将C上1个盘子从C座移到B座。综合以上,可得移动3个盘子,经历7步,步骤为:A→C,A→B,C→B,A→C,B→A,B→C,A→C其中第3步又可以分解为:1)、将B上1个盘子从B座移到A座。2)、将B上1个盘子从B座移到C座。3)、将A上1个盘子从A座移到C座。综合以上分析,将n个盘子从A座移动到C座可以分解为以下3步:1、将A座上n-1个盘子借助C座先移到B座上。2、将A座上剩下的1个盘子移到C座上。3、将n-1个盘子从B座借助A座移到C座上。上面的第1步和第3步,都是把n-1个盘子从一个座移到另一个座,采用的办法是一样的,只是座名不同而已。因此,可以把上面的3个步骤,归成两类操作:1)、将n-1个盘子从一个座移到另一个座上(n>1)。2)、将1个盘子从一个座移到另一个座上。移动n个盘子要经历2n-1步,移动64个盘子,要经历264-1步。#includevoidmain(){voidhanoi(intn,charone,chartwo,charthree);intm;printf("inputthenumberofdiskes:");scanf("%d",&m);printf("Thesteptomoveing%ddiskes:\n",m);hanoi(m,'A','B','C');}voidhanoi(intn,charone,chartwo,charthree){voidmove(charx,char...