递归调用• 使用递归求解问题,通常可以将一个比较大的问题层层转化为一个与原问题相类似的、规模较小的问题进行求解,最终达到对原问题的求解
• 用递归计算 n
可以由下列公式表示:n
1 n=0n(n-1)
n>0分析:把求 n
转化为求( n-1 )
的问题,因为( n-1 )
乘上 n 就是 n
而求( n-1 )
又可以转化为求( n-2 )
最后归结到求 0
的问题,而 0
已定义为 1
=1 又一步步反上去求出 1
直到求出 n
Program p7_20(input,output); var n:integer; s:integer;Function fac(a:integer):integer;Begin if a=0 then fac:=1 else fac:=a*fac(a-1);End;BeginReadln(n);S:=fac(n);Writeln(n,’
=’,s)End
能用递归算法求解的问题一般应该满足如下要求:• 符合递归的描述:需要解决的问题可以化为子问题求解,而子问题求解的方法与原问题相同,只是数量增大或减少;• 递归调用的次数是有限的;• 必须有递归结束的条件
用递归方法求两个数 m 和 n 的最大公约数Program p7_21(input,output);Var m,n,g:integer;Function gcd(m,n:integer):integer; var r:integer; begin r:=m mod n; if r=0 then gcd:=n else gcd:=gcd(n,r);End;Begin read(m,n);g:=gcd(m,n);Writeln(‘m=’,m,’n=’,n,’gcd=’,g);End
输入一串以‘
’结束的字符