首页 理论教育循环结构和阶乘问题的执行过程

循环结构和阶乘问题的执行过程

【摘要】:循环结构是算法中最主要和最基本的一种重复结构。n=4时的阶乘问题算法的执行过程上面已给出,这样的执行过程可以归纳如下:赋循环过程的初始数值pro=1和m=1;测试循环过程的条件m<=n是否成立;如果循环条件成立,则执行循环体中的语句pro=pro*m和m=m+1后继续循环过程;否则结束循环过程;结束。循环结构算法的流程图如图6-4所示。

循环结构是算法中最主要和最基本的一种重复结构。下面首先给出循环结构算法的两个例子,然后用例6-2算法的执行过程讨论循环结构算法的执行流程。

1.循环结构算法的设计

【例6-1】 设计表的查找问题的文字形式的顺序查找算法。

分析:对于有n个数据元素的表,查找表中是否存在一个数据元素为x的数据元素的顺序查找过程是:用数据元素x依次和表中的第一个数据元素到表中的最后一个数据元素比较,如果表中的某一个数据元素和数据元素x相同,则查找成功(即表中存在数据元素x),查找过程结束;如果表中的所有数据元素都和数据元素x不相同,则查找失败(即表中不存在数据元素x),查找过程结束。这样的顺序查找算法是一个循环结构的算法。

下面给出使用了伪码WHILE-DO的文字形式的循环结构的查找算法:

(1)取表中的第一个数据元素赋给变量temp;

(2)WHILE(如果变量temp的数值不等于变量x中数值,并且表中还存在下一个数据元素)顺序执行,否则转到(4);

(3)DO(取表中的下一个数据元素赋给变量temp)转到(2)继续执行;

(4)如果temp的数值等于变量x数值,则查找成功;否则查找失败;

(5)结束。

【例6-2】 设计计算阶乘n!问题的伪码形式的循环结构算法。

分析:n!等于n×(n-1)×(n-2)×⋯×2×1,所以,计算阶乘n!的算法是一个循环结构的算法。

下面给出计算阶乘n!的伪码形式的循环结构的算法。为简化表示以及和高级语言程序比较方便起见,下面的赋值语句采用符号“=”表示。例如,语句“pro=1”等同于语句“ASIGN pro1”。算法如下:

PROCEDURE Factorial(n)

{

pro=1;

m=1;

WHILE(m<=n)DO

{

pro=pro*m;

m=m+1;

}

}(www.chuimin.cn)

2.循环结构算法的执行流程

下面用例6-2算法的执行过程讨论循环结构算法的执行流程。对于计算阶乘问题的算法,若要计算4!,则n=4,执行过程是:

(1)执行pro=1和m=I;

(2)由于m=1,n=4,m<n,所以执行pro=pro*m和m=m+1;

(3)由于m=2,n=4,m<n,所以执行pro=pro*m和m=m+1;

(4)由于m=3,n=4,m<n,所以执行pro=pro*m和m=m+1;

(5)由于m=4,n=4,m==n(符号==表示等于),所以执行pro=pro*m和m=m+1;

(6)由于m=5,n=4,m>n,所以结束循环语句的执行。

(7)结束。

我们再来讨论循环算法的执行流程。以计算阶乘问题的算法为例来讨论。n=4时的阶乘问题算法的执行过程上面已给出,这样的执行过程可以归纳如下:

(1)赋循环过程的初始数值pro=1和m=1;

(2)测试循环过程的条件m<=n是否成立;

(3)如果循环条件成立,则执行循环体中的语句pro=pro*m和m=m+1后继续循环过程;否则结束循环过程;

(4)结束。

上述执行流程可以用流程图来表示。阶乘问题算法的流程图如图6-3所示。

图6-3 阶乘问题算法的流程图

图6-4 循环结构算法的流程图

归纳阶乘问题算法的执行流程,可以总结出循环结构算法的执行流程为:

(1)测试循环过程的条件是否成立;

(2)如果循环条件成立,则执行循环体中的语句;否则循环过程结束。

循环结构算法的流程图如图6-4所示。

大部分稍微复杂一点的算法中都包含一个或若干个循环结构。