资源描述
递归调用 使用递归求解问题,通常可以将一个比较大的问题层层转化为一个与原问题相类似的、规模较小的问题进行求解,最终达到对原问题的求解。 用递归计算n!n!可以由下列公式表示:n!1 n=0n(n-1)! n0分析:把求n!转化为求(n-1)!的问题,因为(n-1)!乘上n就是n!。而求(n-1)!又可以转化为求(n-2)!的问题,.最后归结到求0!的问题,而0!已定义为1。由0!=1又一步步反上去求出1!,2!,.直到求出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.输入一串以!结束的字符,按逆序输出Program p7_22(input,output);Procedure rever; var c:char;Begin read(c); if c! then rever; write(c);End;Begin rever;End.Program p7_23(input,output);Var x:integer;Function up(var n:integer):integer;Forward;Function down(var n:integer):integer; begin n:=n div 2; writeln(n,in down); if n1 then n:=up(n);End;Function up;Begin while(n mod 2)0 do begin n:=n*3+1;Writeln(n,in up);End;N:=down(n);End;BeginWrite(input x:);Readln(x);X:=up(x);Writeln(ok)End.运行:运行:Input x:63 in down10 in up5 in down16 in up8 in down4 in down2 in down2 in downok
展开阅读全文