统计循环次数

题目描述

for(int i = 1; i < n; i++) {
  for(int j = 1; j < i; j++) {
    for(int k = 1; k < j; k++) {
      cout << "Hello World ";
    }
  }
}

上述循环一共执行了多少次”Hello World “语句?

不妨假设 a[n,3] a [ n , 3 ] 为循环层数为3,输入值为 n n 时的语句执行次数,则有
a[n,3]=a[n1,2]+a[n2,2]+a[n3,2]++a[4,2]+a[3,2]
 =a[n2,1]+a[n3,1]++a[2,1]   = a [ n − 2 , 1 ] + a [ n − 3 , 1 ] + ⋯ + a [ 2 , 1 ]
 +a[n3,1]++a[2,1]   + a [ n − 3 , 1 ] + ⋯ + a [ 2 , 1 ]
 +   + ⋯ ⋯ ⋯
 +a[2,1]   + a [ 2 , 1 ]
 =a[n2,1]+2a[n3,1]++(n4)a[3,1]+(n3)a[2,1]   = a [ n − 2 , 1 ] + 2 ∗ a [ n − 3 , 1 ] + ⋯ + ( n − 4 ) ∗ a [ 3 , 1 ] + ( n − 3 ) ∗ a [ 2 , 1 ]
又因为

a[m,1]=m1 a [ m , 1 ] = m − 1

所以有 a[n,3]=(n3)1+(n4)2++2(n4)+1(n3)=n3k=1(nk2)k a [ n , 3 ] = ( n − 3 ) ∗ 1 + ( n − 4 ) ∗ 2 + ⋯ + 2 ∗ ( n − 4 ) + 1 ∗ ( n − 3 ) = ∑ k = 1 n − 3 ( n − k − 2 ) ∗ k
又因为
(n2)2=k2+(nk2)2+2(nk2)k ( n − 2 ) 2 = k 2 + ( n − k − 2 ) 2 + 2 ∗ ( n − k − 2 ) ∗ k

k=1n3(nk2)k=12(n3)(n2)212k=1n3(k2+(nk2)2) ∑ k = 1 n − 3 ( n − k − 2 ) ∗ k = 1 2 ( n − 3 ) ( n − 2 ) 2 − 1 2 ∑ k = 1 n − 3 ( k 2 + ( n − k − 2 ) 2 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值