一道求频度的题

写出下面算法中带标号语句的频度。
   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次。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值