2025年05月01日 星期四 农历 乙巳年(蛇)四月初四

信息学奥赛常考算法——递归法

发布人:钱翠萍    发布时间:2012-06-22 点击量:3270

递归法

递归是程序设计中程序调用的一种方法,但并非所有的程序设计语言都支持递归程序设计,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.