写出下面算法中带标号语句的频度。
TYPE ar=ARRAY[1..n] OF datatype;
PROCEDURE perm ( a: ar; k, n: integer);
VAR x: datatype; i:integer;
BEGIN
(
1)IF k=n
THEN BEGIN
(
2)FOR i:=1 TO n DO
(
3)write (a[i]);
writeln;
END
ELSE BEGIN
(
4) FOR i:=k TO n DO
(
5)a[i]:=a[i]+i*i;
(
6) perm (a, k+1, n);
END;
END;
设
k的初值等于1。
答案:
19.
(1)n (2)n+1 (3)n (4)(n+4)(n-1)/2 (5)(n+2)(n-1)/2 (6)n-1
这是一个递归调用,因
k的初值为1,由语句(6)知,每次调用k增1,故第(1)语句执行n次。(2)是FOR循环语句,在满足(1)的条件下执行,该语句进入循环体(3)n次,加上最后一次判断出界,故执行了n+1次。(4)也是循环语句,当k=1时判断n+1次(进入循环体(5)n次),k=2时判断n次,最后一次k=n-1时判断3次,故执行次数是(n+1)+n+…+3=(n+4)(n-1)/2次。语句(5)是(4)的循环体,每次比(4)少一次判断,故执行次数是n+(n-1)+…+2=(n+2)(n-1)/2次。注意分析时,不要把(2)分析成n次,更不是1次。