★递归法
递归是程序设计中程序调用的一种方法,但并非所有的程序设计语言都支持递归程序设计,pascal支持递归程序设计。
这种利用递归函数或递归方法解决问题的过程称为递归法,采用递归法解决问题时必须符合下面三个条件:
① 可以把一个问题转换成一个新问题,而这个新问题的解决方法与原问题的解决方法相同,只是所处理的对象有所不同,他们只是有规律地递增或递减;
②可以通过转化过程使问题得到解决;
③必定要有一个明确的递归条件,否则递归将会无休止进行下去。
对于问题的描述或定义本身就是递归形式的问题,用递归方法编写就非常方便。
典型例题:
【例题】辗转相除法又叫做“欧几里得算法”,是公元前300年左右希腊数学家欧几里得在他的著作《几何原本》中提出的。利用这个方法,可以较快地求出两个自然数的最大公约数。
【程序实现】
program oujilide;
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
readln(m,n);
g:=gcd(m,n);
writeln(‘m=’,m,’n=’,n,’gcd=’,g);
end.